(PHP 5, PHP 7, PHP 8)
mysqli::prepare -- mysqli_prepare — 実行するための SQL文 を準備する
オブジェクト指向型
手続き型
SQL文を準備し、後でそれを操作するために使用する ステートメントハンドルを返します。 クエリは、単一の SQL文である必要があります。
SQL文のテンプレートには、ゼロ個以上のパラメータマーカ
(?
) を含めることができます。
パラメータマーカは、プレースホルダとも呼ばれています。
パラメータマーカは、SQL文を実行する前に
mysqli_stmt_bind_param() を使用して
アプリケーション変数にバインドする必要があります。
link
手続き型のみ: mysqli_connect() あるいは mysqli_init() が返す mysqliオブジェクト。
query
クエリを表す文字列。 単一のSQL文である必要があります。
SQL文には、ゼロ個以上のパラメータマーカを含めることができますます。
パラメータマーカはクエスチョンマーク(?
) を適切な位置に置くこと埋め込みます。
注意:
パラメータのマーカは、それが SQL 文の適切な位置にある場合のみ有効です。 例えば
INSERT
文のVALUES()
リストの中 (行に登録するカラム値を指定する) やWHERE
句で列のデータと比較する値などが 適切な位置の例です。しかし、識別子 (テーブルやカラムの名前) や
SELECT
文で選択する項目の名前に指定したり、 (等号=
のような) 二項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 一般に、パラメータが使用可能なのはデータ操作言語 (DML) ステートメントであり、データ定義言語 (DDL) ステートメントでは使用できません。
mysqli_prepare() はステートメントオブジェクトを返します。
エラー時には false
を返します。
例1 mysqli::prepare() の例
オブジェクト指向型
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* プリペアドステートメントを作成します。*/
$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
/* マーカにパラメータをバインドします */
$stmt->bind_param("s", $city);
/* クエリを実行します */
$stmt->execute();
/* 結果変数をバインドします */
$stmt->bind_result($district);
/* 値を取得します */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
手続き型
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* プリペアドステートメントを作成します */
$stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?");
/* マーカにパラメータをバインドします */
mysqli_stmt_bind_param($stmt, "s", $city);
/* クエリを実行します */
mysqli_stmt_execute($stmt);
/* 結果変数をバインドします */
mysqli_stmt_bind_result($stmt, $district);
/* 値を取得します */
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
上の例の出力は以下となります。
Amersfoort is in district Utrecht