MySQLiを使ってSELECT文を実行
MySQLiを使ってSELECT文を実行するには、
1. データベースに接続 (PHP:MySQLiを使ったDB接続方法)、
2. 取得したmysqliオブジェクトの stmt_init メソッドを使いステートメントを初期化する
3. stmt_init戻り値のmysqli_stmtオブジェクトの prepare メソッドでSQLステートメントを実行するための準備を行う
4. SQLにプレースホルダー(?)が含まれる場合は mysqli_stmtオブジェクトの bind_param メソッドでパラメータに値を当てはめる
5. mysqli_stmtオブジェクトの execute メソッドでSQLを実行する
6. 実行結果を取得するための準備として mysqli_stmtオブジェクトの bind_result メソッドで結果を格納する変数を列の数だけ指定
6. 実際に結果を取得しバインド変数に格納するには fetch メソッドを使用する
7. 最後にmysqli_stmtオブジェクトの close メソッドを呼び出して終了
1. データベースに接続 (PHP:MySQLiを使ったDB接続方法)、
2. 取得したmysqliオブジェクトの stmt_init メソッドを使いステートメントを初期化する
戻り値として mysqli_stmt クラスのオブジェクトを返す。
$sth = $dbh->stmt_init();
3. stmt_init戻り値のmysqli_stmtオブジェクトの prepare メソッドでSQLステートメントを実行するための準備を行う
$sth->prepare($sql)
4. SQLにプレースホルダー(?)が含まれる場合は mysqli_stmtオブジェクトの bind_param メソッドでパラメータに値を当てはめる
メソッドの types引数 には対応するバインド変数の 変数の型 を以下の型文字を結合して指定
| 型 | 説明 |
|---|---|
| i | int |
| d | float |
| s | string |
| b | blob |
$mincd = '2070000';
$maxcd = '2090000';
$sth->bind_param('ss', $mincd, $maxcd);
5. mysqli_stmtオブジェクトの execute メソッドでSQLを実行する
6. 実行結果を取得するための準備として mysqli_stmtオブジェクトの bind_result メソッドで結果を格納する変数を列の数だけ指定
例:実行するSQL
列 zipcode, pref, city, town をそれぞれ変数 $code, $pref, $city, $town へ格納する
反復可能な結果セットを取得したり、 行をオブジェクトや配列で取得したい場合は get_result メソッドを使用する
SELECT zipcode, pref, city, town FROM zipcodes
WHERE zipcode >= ? AND zipcode <= ?
ORDER BY zipcode ASC LIMIT 100
列 zipcode, pref, city, town をそれぞれ変数 $code, $pref, $city, $town へ格納する
$sth->bind_result($code, $pref, $city, $town);
反復可能な結果セットを取得したり、 行をオブジェクトや配列で取得したい場合は get_result メソッドを使用する
6. 実際に結果を取得しバインド変数に格納するには fetch メソッドを使用する
戻り値として、true:成功、false:エラー、null:行データなし が返るので、falseまたはnullが返るまでfetchを繰り返す
while($sth->fetch()){
echo '<tr><td>', htmlspecialchars($code, ENT_QUOTES, 'UTF-8');
echo '</td><td>', htmlspecialchars($pref, ENT_QUOTES, 'UTF-8');
echo '</td><td>', htmlspecialchars($city, ENT_QUOTES, 'UTF-8');
echo '</td><td>', htmlspecialchars($town, ENT_QUOTES, 'UTF-8');
echo '</td></tr>', PHP_EOL;
}
7. 最後にmysqli_stmtオブジェクトの close メソッドを呼び出して終了
$sth->close();
0 件のコメント:
コメントを投稿