注: mysql_
からの変換 mysqli_
へ
最適ではない可能性があります。 PDOを検討してください
すべてのコードをOOP
に変換する準備ができている場合 。
mysql_
のすべてのインスタンスを置き換えようとするのは魅力的かもしれません。 mysqli_
を使用 そしてそれがうまくいくことを祈ります。あなたは近くにいるでしょうが、完全には正しいとは言えません。
データベースへの接続:
幸い、 mysqli_connect
mysql_query
に十分に密接に機能します それらの関数名を入れ替えることができます。
mysql _:
$con = mysql_connect($host, $username, $password);
mysqli _:
$con = mysqli_connect($host, $username, $password);
データベースの選択
これで、mysqli_
の他のほとんどの関数が使用されます ライブラリの場合、mysqli_select_db
を渡す必要があります 最初のとしてのデータベース接続 パラメータ。ほとんどのmysqli_
関数は最初に接続オブジェクトを必要とします。
この関数では、関数に渡す引数の順序を切り替えるだけです。以前に接続オブジェクトを渡したことがない場合は、今すぐ最初のパラメータとして追加する必要があります。
mysql _:
mysql_select_db($dbname, $con);
mysqli _:
mysqli_select_db($con, $dbname);
ボーナスとして、データベース名を4番目のパラメーターとしてmysqli_connect
に渡すこともできます。 -mysqli_select_db
を呼び出す必要性をバイパスします 。
$con = mysqli_connect($host, $username, $password, $dbname);
ユーザー入力をサニタイズする
mysqli_real_escape_string
の使用 mysql_real_escape_string
と非常によく似ています 。最初のパラメータとして接続オブジェクトを渡す必要があります。
mysql _:
$value1 = mysql_real_escape_string($input_string);
mysqli _:
$value1 = mysqli_real_escape_string($con, $input_string);
非常に重要:クエリの準備と実行
mysql_
の理由の1つ 関数は、準備されたステートメントを処理できないため、そもそも非推奨になりました。コードをmysqli_
に変換するだけの場合 この重要なステップを踏まないと、mysql_
の最大の弱点のいくつかにさらされます。 関数。
プリペアドステートメントとその利点に関するこれらの記事を読む価値があります:
注:プリペアドステートメントを使用する場合は、*
を使用するのではなく、クエリしようとしている各列を明示的にリストすることをお勧めします。 すべての列を照会するための表記。このようにして、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);
}
エラーの表示
エラーの表示は、mysqli_
では少し異なります。 。 mysqli_error
最初のパラメータとして接続オブジェクトが必要です。しかし、接続が失敗した場合はどうなりますか? mysqli_
接続オブジェクトを必要としない関数の小さなセットを紹介します: mysqli_connect_*
機能。
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);
}
}