Poznámka: Převod z mysql_
na mysqli_
nemusí být optimální. Zvažte CHOP
pokud jste připraveni převést celý svůj kód na OOP
.
Může být lákavé pokusit se nahradit všechny instance mysql_
pomocí mysqli_
a modlete se, aby to fungovalo. Byli byste blízko, ale ne úplně na místě.
Připojování k databázi:
Naštěstí mysqli_connect
funguje dostatečně blízko k mysql_query
že můžete jednoduše vyměnit názvy jejich funkcí.
mysql_:
$con = mysql_connect($host, $username, $password);
mysqli_:
$con = mysqli_connect($host, $username, $password);
Výběr databáze
Nyní s většinou ostatních funkcí v mysqli_
knihovny, budete muset předat mysqli_select_db
připojení k databázi jako jeho první parametr. Většina mysqli_
funkce vyžadují nejprve objekt připojení.
U této funkce stačí přepnout pořadí argumentů, které funkci předáte. Pokud jste mu dříve nepředali objekt připojení, musíte jej nyní přidat jako první parametr.
mysql_:
mysql_select_db($dbname, $con);
mysqli_:
mysqli_select_db($con, $dbname);
Jako bonus můžete také předat název databáze jako čtvrtý parametr do mysqli_connect
- vynechání potřeby volání mysqli_select_db
.
$con = mysqli_connect($host, $username, $password, $dbname);
Vyčištění uživatelského vstupu
Pomocí mysqli_real_escape_string
je velmi podobný mysql_real_escape_string
. Stačí předat objekt připojení jako první parametr.
mysql_:
$value1 = mysql_real_escape_string($input_string);
mysqli_:
$value1 = mysqli_real_escape_string($con, $input_string);
Velmi důležité:Příprava a spuštění dotazu
Jedním z důvodů je mysql_
funkce byly zastaralé zpočátku byla jejich neschopnost zpracovat připravené příkazy. Pokud jednoduše převedete svůj kód na mysqli_
aniž byste udělali tento důležitý krok, budete vystaveni některým z největších slabin mysql_
funkcí.
Stojí za to si přečíst tyto články o připravených výpisech a jejich výhodách:
Wikipedie – připravená prohlášení
PHP.net – připravená prohlášení MySQLi
Poznámka:Při použití připravených příkazů je lepší explicitně uvést každý sloupec, který se pokoušíte dotazovat, než používat *
zápis pro dotaz na všechny sloupce. Tímto způsobem můžete zajistit, že jste započítali všechny sloupce ve volání mysqli_stmt_bind_result
.
mysql_:
$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
$col1 = $row['col1'];
$col2 = $row['col2'];
echo $col1 . ' ' . $col2 . '<br />';
}
mysqli_:
$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {
/* pass parameters to query */
mysqli_stmt_bind_param($stmt, "s", $value1);
/* run the query on the database */
mysqli_stmt_execute($stmt);
/* assign variable for each column to store results in */
mysqli_stmt_bind_result($stmt, $col1, $col2);
/* fetch values */
while (mysqli_stmt_fetch($stmt)) {
/*
on each fetch, the values for each column
in the results are automatically stored in
the variables we assigned using
"mysqli_stmt_bind_result"
*/
echo $col1 . ' ' . $col2 . '<br />';
}
/* close statement */
mysqli_stmt_close($stmt);
}
Zobrazují se chyby
Zobrazování chyb funguje trochu jinak s mysqli_
. mysqli_error
vyžaduje objekt připojení jako svůj první parametr. Ale co když se spojení nezdařilo? mysqli_
zavádí malou sadu funkcí, které nevyžadují objekt připojení:mysqli_connect_*
funkce.
mysql_:
if (!$con) {
die('Could not connect: ' . mysql_error());
}
if (!$result) {
die('SQL Error: ' . mysql_error());
}
mysqli_:
/* check connection error*/
if (mysqli_connect_errno()) {
die( 'Could not connect: ' . mysqli_connect_error() );
}
/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {
// ... execute query
if (mysqli_stmt_error($stmt)) {
echo 'SQL Error: ' . mysqli_stmt_error($stmt);
}
}