注:mysql_
からへの変換はmysqli_
最適ではない場合があります。すべてのコードをOOPに変換する準備ができている場合は、PDOを検討してください。
mysql_
のすべてのインスタンスをwithに置き換えて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);
非常に重要: クエリの準備と実行
関数が最初から廃止された理由の 1 つmysql_
は、準備済みステートメントを処理できないことでした。この重要な手順を実行せずに単にコードを に変換するmysqli_
と、関数の最大の弱点のいくつかにさらされることになりmysql_
ます。
準備されたステートメントとその利点に関する次の記事を読む価値があります。
ウィキペディア - 準備された声明
PHP.net - MySQLi プリペアド ステートメント
*
注: 準備済みステートメントを使用する場合は、表記法を使用してすべての列を照会するのではなく、照会しようとしている各列を明示的にリストすることをお勧めします。このようにして、 への呼び出しですべての列を考慮したことを確認できます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);
}
}