PHP MySQL asemel MySQLi

Allikas: Kuutõrvaja
Redaktsioon seisuga 30. märts 2015, kell 16:16 kasutajalt Drakan (arutelu | kaastöö) (Näited)
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)

MySQL ja MySQLi

MySQL on maailma üks enimlevinud relatsioonilise andmebaasi haldamise süsteeme, millesse saab päringud esitada standardiseeritult. Esimene versioon valmis 1995-ndal aastal.

MySQLi (MySQL Improved) on olemuselt sarnane MySQL süsteemiga, kuid on eelkäijaga võrreldes turvalisem, funktsionaalsem ning paremini hallatav nii algajatele kui edasijõudnutele.

Et üleminek oleks võimalikult valutu, kasutab MySQLi laiendus sarnaseid käske MySQL'ile. Näiteks:

 MySQL               MySQLi
 --------------------------------------
 mysql_connect       mysqli_connect
 mysql_error         mysqli_error
 mysql_query         mysqli_query
 mysql_fetch_array   mysqli_fetch_array
 mysql_fetch_row     mysqli_fetch_row
 mysql_fetch_assoc   mysqli_fetch_assoc
 mysql_free_result   mysqli_free_result
 mysql_close         mysqli_close

Näited

Mõttekas on andmebaasi ühenduse loomise parameetrid hoida ülejäänud koodist eraldi, et seda vajadusel kergem muuta oleks.

<?php

// conf.database.php

$db_server = "localhost"; // server, kus asub andmebaas
$db_user   = "kasutaja";  // kasutajatunnus
$db_pass   = "parool";    // parool
$db_base   = "andmebaas"; // andmebaas

?>

Andmebaasiga ühenduse loomise kood on samuti mõttekas eraldi failis hoida, et seda vajadusel PHP faili laadida. MySQL näide:

<?php
// dbc_mysql.php

include_once( "conf.database.php" ); // Lisame andmebaasi ühenduse jaoks vajalikud muutujad

$db = @mysql_connect( $db_server, $db_user, $db_pass ); // Loome andmebaasiga ühenduse (@ märk, et võimalikku veateadet ekraanile ei tuleks)

// Kui andmebaasiühendus ebaõnnestub
if ( !$db ) {
  die( "Meie andmebaasimootor hetkel streigib! Proovi palun hiljem uuesti!" ); // Väljastame veateate ja lõpetame töö
}

mysql_select_db("$db_base", $db) or die( "Andmebaasi <b>" . $db_base . "</b> ei leitud!" ); // Kui andmebaasi valimine ebaõnnestub, väljastame veateate ja lõpetame töö

mysql_set_charset('utf8', $db); // määrame SQL andmete tähestikuks UTF-8
?>

MySQLi näide:

<?php
// dbc_mysqli.php

include_once( "conf.database.php" ); // Lisame andmebaasi ühenduse jaoks vajalikud muutujad

$db = @mysqli_connect( $db_server, $db_user, $db_pass, $db_base ); // Loome andmebaasiga ühenduse (@ märk, et veateateid ekraanile ei tuleks)

// Kui andmebaasiühendus ebaõnnestub
if ( !$db ) {
  die( "Meie andmebaasimootor hetkel streigib! Proovi palun hiljem uuesti!" ); // Väljastame veateate ja lõpetame töö
}

// mysqli_select_db käsk on küll olemas, kuid andmebaasi valimist on lihtsam teha läbi mysqli_connect'i

mysqli_set_charset( $db, 'utf8' ); // määrame SQL andmete tähestikuks UTF-8

?>

Järgnevalt mõned näited, kuidas MySQL ja MySQLi päringut luua. MySQL päring:

<?php
echo "<br/> --- MySQL päring --- <br/><br/>"; // Kuvame ekraanil meetodi kirjelduse

include "dbc_mysql.php"; // Loome SQL ühenduse

$query = mysql_query( "select id, word from words limit 0, 10" ); // Teeme päringu

while ( $row = mysql_fetch_assoc( $query ) ) { // Käime läbi päringu tulemused
  echo $row['id'] . " - " . $row['word'] . "<br/>"; // Kuvame andmed ekraanile
}
?>

MySQLi päring:

<?php
echo "<br/> --- MySQLi päring --- <br/><br/>"; // Kuvame ekraanil meetodi kirjelduse

include "dbc_mysqli.php";

$query = mysqli_query( $db, "select id, word from words limit 0, 10" ); // Teeme päringu

while ( $row = mysqli_fetch_assoc( $query ) ) {
  echo $row['id'] . " - " . $row['word'] . "<br/>"; // Toome read ekraanile
}
?>

MySQLi alternatiivne päring:

<?php
echo "<br/> --- MySQLi alternatiivse päringu näide --- <br/><br/>"; // Kuvame ekraanil meetodi kirjelduse

$query = $db->query( "select id, word from words limit 0, 10" ); // Teeme päringu

while($row = $query->fetch_assoc()){
  echo $row['id'] . " - " . $row['word'] . "<br/>"; // Toome read ekraanile
}
?>

Kui koduleht on jaotatud klassidesse:

<?php
class leht {

  // Klassi konstruktor
  function leht() {
    global $db; // Teeme $db muutuja globaalseks

    echo "<br/> --- MySQLi alternatiivse päringu näide klassi seest --- <br/><br/>"; // Kuvame ekraanil meetodi kirjelduse

    $query = $db->query( "select id, word from words limit 0, 10" ); // Teeme päringu

    while($row = $query->fetch_assoc()){
      echo $row['id'] . " - " . $row['word'] . "<br/>"; // Toome read ekraanile
    }

  }

}

new leht();

?>

Kõige lihtsam lahendus?

See sõltub suuresti veebirakenduse ülesehitusest. Kui SQL päringute jaoks on eraldi klass, siis on muudatuse tegemine ülimalt lihtne. Kui mysql_query käsud on php koodis laiali, siis tuleks ükshaaval need asendada mysqli_query käskudega, koos viitega andmebaasi ühendusele (näites $db muutuja).

Lingid

http://php.net/manual/en/book.mysql.php

http://php.net/manual/en/book.mysqli.php

http://et.wikipedia.org/wiki/MySQL

http://codular.com/php-mysqli

http://www.pontikis.net/blog/how-to-use-php-improved-mysqli-extension-and-why-you-should

http://metshein.com/index.php/veeb/php-edasijoudnutele/710-03-php-ja-mysql-php-sidumine-mysql-andmebaasiga