PHP マニュアル
前のページ |  | 次のページ

# mysqli_prepare

(PHP 5)

mysqli_prepare

(no version information, might be only in CVS)

mysqli->prepare -- 実行するための SQL ステートメントを準備する

## 説明

手続き型:

mysqli_stmt mysqli_prepare ( mysqli link, string query )

オブジェクト指向型（メソッド）

class mysqli {
mysqli_stmt prepare ( string query )
}

mysqli_prepare() は、null で終わる文字列から SQL クエリを準備し、後でそのステートメントを操作するために使用する ステートメントハンドルを返します。 クエリは、単一の SQL 文である必要があります。

> 注意: ステートメントの最後にセミコロンや \g を追加してはいけません。

query にはひとつまたは複数のパラメータを 含めることが可能です。そのためには、適切な位置にクエスチョンマーク （?）を埋め込みます。

> 注意: パラメータのマーカは、それが SQL 文の適切な位置にある場合のみ 有効です。例えば INSERT 文（行に登録するカラム値を指定する）の VALUES() リストの中や WHERE 句で列のデータと比較する値などが 適切な位置の例です。

> しかし、識別子（テーブルやカラムの名前）や SELECT 文で選択する 項目の名前に指定したり、（等号 = のような） 2 項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 また、パラメータのマーカを NULL と比較して ? IS NULL のようにすることもできません。 一般に、パラメータが使用可能なのはデータ操作言語（DML） ステートメントであり、データ定義言語（DDL）ステートメントでは 使用できません。

パラメータマーカは、ステートメントの実行や行の取得の前に mysqli_stmt_bind_param() や mysqli_stmt_bind_result() を使用して アプリケーション変数にバインドする必要があります。

## 返り値

mysqli_prepare() はステートメントオブジェクトを 返します。エラー時には `FALSE` を返します。

## 参考

mysqli_stmt_execute()、 mysqli_stmt_fetch()、 mysqli_stmt_bind_param()、 mysqli_stmt_bind_result() そして mysqli_stmt_close()

## 例

例 1. オブジェクト指向型
`<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* 接続状況をチェックします */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $city = "Amersfoort"; /* プリペアドステートメントを作成します */ if ($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); /* ステートメントを閉じます */ $stmt->close(); } /* 接続を閉じます */ $mysqli->close(); ?>`

例 2. 手続き型
`<?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* 接続状況をチェックします */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $city = "Amersfoort"; /* プリペアドステートメントを作成します */ if ($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); /* ステートメントを閉じます */ mysqli_stmt_close($stmt); } /* 接続を閉じます */ mysqli_close($link); ?>`

上の例の出力は以下となります。

    Amersfoort is in district Utrecht

前のページ | ホーム | 次のページ
mysqli_ping | 上に戻る | mysqli_query