SunshinePHP Developer Conference 2015

maxdb_stmt_bind_param

maxdb_stmt::bind_param

(PECL maxdb >= 1.0)

maxdb_stmt_bind_param -- maxdb_stmt::bind_paramプリペアドステートメントに、変数をパラメータとしてバインドする

説明

手続き型

bool maxdb_stmt_bind_param ( resource $stmt , string $types , mixed &$var1 [, mixed &$... ] )

オブジェクト指向型

bool maxdb_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )

手続き型 (拡張構文):

bool maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var )

オブジェクト指向型 (拡張構文):

bool maxdb_stmt::bind_param ( string $types , array &$var )

maxdb_stmt_bind_param() は、 maxdb_prepare() に渡された SQL 文のパラメータマーカに、 変数をバインドするために使用されます。 文字列 types にはひとつあるいは複数の文字が含まれ、 これによって対応するバインド変数の型を指定します。

maxdb_stmt_bind_param() の拡張構文では、 パラメータを、PHP の変数リストではなくひとつの配列として渡せるようになります。 maxdb_stmt_bind_param() のコール前に配列変数が使用されていない場合は、空の配列として初期化されます。 maxdb_stmt_bind_param() の拡張構文の使用法については、 例を参照ください。

SELECT INTO SQL 文の変数は、maxdb_stmt_bind_param() でバインドすることも可能です。データベースプロシージャのパラメータについては maxdb_stmt_bind_param() を使用してバインドできます。 このような場合の maxdb_stmt_bind_param() の使用法については、例を参照ください。

SQL 文の INTO 変数にバインドする変数が事前に使用されていた場合は、 その変数の内容は SELECT INTO 文のデータで上書きされます。 maxdb_stmt_bind_param() をコールした後は、 この変数への参照は無効になります。

データベースプロシージャの INOUT パラメータの場合、 バインドされた INOUT 変数の内容は、データベースプロシージャの出力で 上書きされます。 maxdb_stmt_bind_param() をコールした後は、 この変数への参照は無効になります。

型指定文字
文字 説明
i 対応する変数は integer 型です
d 対応する変数は double 型です
s 対応する変数は string 型です
b 対応する変数は blob で、一括して送信されます

返り値

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

例1 オブジェクト指向型

<?php
$maxdb 
= new maxdb('localhost''MONA''RED''DEMODB');

/* 接続を調べます */
if (maxdb_connect_errno()) {
   
printf("接続に失敗しました: %s\n"maxdb_connect_error());
   exit();
}

$maxdb->query ("CREATE TABLE temp.mycity LIKE hotel.city");
$maxdb->query ("INSERT INTO temp.mycity SELECT * FROM hotel.city");

$stmt $maxdb->prepare("INSERT INTO temp.mycity VALUES (?, ?, ?)");
$stmt->bind_param('sss'$zip$name$state);

$zip '11111';
$name 'Georgetown';
$state 'NY';

/* プリペアドステートメントを実行します */
$stmt->execute();

printf("%d 行挿入されました。\n"$stmt->affected_rows);

/* ステートメントおよび接続を閉じます */
$stmt->close();

/* CountryLanguage テーブルを掃除します */
$maxdb->query("DELETE FROM temp.mycity WHERE name='Georgetown'");
printf("%d 行削除されました。\n"$maxdb->affected_rows);

/* 接続を閉じます */
$maxdb->close();
?>

例2 手続き型

<?php
$link 
maxdb_connect("localhost""MONA""RED""DEMODB");

/* 接続を調べます */
if (!$link) {
   
printf("接続に失敗しました: %s\n"maxdb_connect_error());
   exit();
}

maxdb_query ($link"CREATE TABLE temp.mycity LIKE hotel.city");
maxdb_query ($link"INSERT INTO temp.mycity SELECT * FROM hotel.city");

$stmt maxdb_prepare($link"INSERT INTO temp.mycity VALUES (?, ?, ?)");
maxdb_stmt_bind_param($stmt'sss'$zip$name$state);

$zip '11111';
$name 'Georgetown';
$state 'NY';

/* プリペアドステートメントを実行します */
maxdb_stmt_execute($stmt);

printf("%d 行挿入されました。\n"maxdb_stmt_affected_rows($stmt));

/* ステートメントおよび接続を閉じます */
maxdb_stmt_close($stmt);

/* CountryLanguage テーブルを掃除します */
maxdb_query($link"DELETE FROM temp.mycity WHERE name='Georgetown'");
printf("%d 行削除されました。\n"maxdb_affected_rows($link));

/* 接続を閉じます */
maxdb_close($link);
?>

上の例の出力は、 たとえば以下のようになります。

1 行挿入されました。
1 行削除されました。

例3 手続き型 (SELECT INTO)

<?php
$link 
maxdb_connect("localhost""MONA""RED""DEMODB");

/* 接続を調べます */
if (!$link) {
   
printf("接続に失敗しました: %s\n"maxdb_connect_error());
   exit();
}
   
/* SQL クエリを実行します */
$stmt maxdb_prepare ($link"SELECT price INTO ? FROM hotel.room where hno = ? and type = ?");
if (!
$stmt) {
  
printf ("Prepare failed: %s\n"maxdb_error($link));
}

$hno "50";
$rtype "suite";

maxdb_stmt_bind_param($stmt'dss'$price$hno$rtype);
maxdb_stmt_execute($stmt);

printf ("%f\n"$price);

maxdb_stmt_close ($stmt);
?>

上の例の出力は、 たとえば以下のようになります。

21.600000

例4 手続き型 (DB プロシージャ)

<?php
$link 
maxdb_connect("localhost""MONA""RED""DEMODB");

/* 接続を調べます */
if (!$link) {
   
printf("接続に失敗しました: %s\n"maxdb_connect_error());
   exit();
}

maxdb_report (MAXDB_REPORT_OFF);
maxdb_query($link,"DROP DBPROC test_proc");
maxdb_report (MAXDB_REPORT_ERROR);

$query "create dbproc test_proc (INOUT e_text char(72)) AS select * from SYSDBA.DUAL; fetch into :e_text;";

maxdb_query($link$query);

/* SQL クエリを実行します */
$stmt maxdb_prepare ($link"CALL test_proc (?)");
if (!
$stmt) {
  
printf ("Prepare failed: %s\n"maxdb_error($link));
}

maxdb_stmt_bind_param($stmt's'$result);
maxdb_stmt_execute($stmt);

printf ("%s\n"$result);

maxdb_stmt_close ($stmt);
?>

上の例の出力は、 たとえば以下のようになります。

a

例5 オブジェクト指向型 (拡張構文)

<?php
$maxdb 
= new maxdb('localhost''MONA''RED''DEMODB');

/* 接続を調べます */
if (maxdb_connect_errno()) {
   
printf("接続に失敗しました: %s\n"maxdb_connect_error());
   exit();
}

$maxdb->query ("CREATE TABLE temp.mycity LIKE hotel.city");
$maxdb->query ("INSERT INTO temp.mycity SELECT * FROM hotel.city");

$stmt $maxdb->prepare("INSERT INTO temp.mycity VALUES (?, ?, ?)");

$arr = array();

$stmt->bind_param('iss'$arr);

$arr[0] = 11111;
$arr[1] = 'Georgetown';
$arr[2] = 'NY';

/* プリペアドステートメントを実行します */
$stmt->execute();

printf("%d 行挿入されました。\n"maxdb_stmt_affected_rows($stmt));

$arr[0] = 22222;
$arr[1] = 'New Orleans';
$arr[2] = 'LA';

/* プリペアドステートメントを実行します */
$stmt->execute();

printf("%d 行挿入されました。\n"$stmt->affected_rows);

/* ステートメントおよび接続を閉じます */
$stmt->close();

$result $maxdb->query("SELECT * from temp.mycity WHERE zip = '11111' OR zip = '22222'");
if (
$result) {
  while (
$row $result->fetch_row()) {
    
printf ("%s %s %s\n"$row[0], $row[1], $row[2]);
  }
}

/* CountryLanguage テーブルを掃除します */
$maxdb->query("DELETE FROM temp.mycity WHERE name='Georgetown'");
$maxdb->query("DELETE FROM temp.mycity WHERE name='New Orleans'");
printf("%d 行削除されました。\n"$maxdb->affected_rows);

/* 接続を閉じます */
$maxdb->close();
?>

上の例の出力は、 たとえば以下のようになります。

1 行挿入されました。
1 行挿入されました。
11111 Georgetown NY
22222 New Orleans LA
2 行削除されました。

参考

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top