mysqli_stmt_prepare

(PHP 5)

mysqli_stmt_prepare

(no version information, might be only in CVS)

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

説明

手続き型:

bool mysqli_stmt_prepare ( mysqli_stmt stmt, string query )

オブジェクト指向型(メソッド)

class mysqli_stmt {

mixed prepare ( string query )

}

mysqli_stmt_prepare() は、null で終わる文字列で 指定した SQL クエリを準備します。mysqli_stmt_init() で割り当てられたステートメントオブジェクトを使用します。 クエリは単一の SQL 文で構成されている必要があります。

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

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

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

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

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

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

参考

mysqli_stmt_init()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";

/* プリペアドステートメントを作成します */
$stmt =  $mysqli->stmt_init();
if (
$stmt->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";

/* プリペアドステートメントを作成します */
$stmt = mysqli_stmt_init($link);
if (
$stmt = mysqli_stmt_prepare($stmt, "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