の違いは何ですかbindParamとbindValue?
質問
の違いは何ですか PDOStatement::bindParam()
や PDOStatement::bindValue()
?
解決
答えは bindParam
のドキュメントであります:
のPDOStatement異なり:: bindValue()、変数)を基準として結合されており、唯一のPDOStatementは::(実行時に評価されるであろうと呼ばれています。
パラメータマーカーにPHP変数をバインドする::のPDOStatementを呼び出しbindParam():結合した変数は、入力として、その値を渡し、出力値を受信し、もしあれば、それらの関連するパラメータマーカーの
例:
$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindParam(':baz', $value); // use bindParam to bind the variable
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foobarbaz'
または
$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindValue(':baz', $value); // use bindValue to bind the variable's value
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foo'
他のヒント
PDOStatement::bindParam
の手動入力から:
[
bindParam
付]PDOStatement::bindValue()
異なり、変数は参照としてバインドされるのみPDOStatement::execute()
が呼び出された時点で評価されます。
ですから、例えばます:
$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'
または
$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male'
ここにもいるようになってきてい:
- と
bindParam
, できるだけパス変数;な価値 - と
bindValue
, とすることができます両方の価値観の違いや変数) bindParam
でのみ動作変数できるようにするために、パラメータとして与えられた入力/出力し、"参照" (価値が変わってきているんですけど"参照"をサポートに対するコミットメント :有用であるドライバー(引用のマニュアル):
支援の呼び出しの保存 手順に戻すことでデータを出力 パラメータの一部としても 入力/出力パラメータの両方を送信 データ更新されます。
一部のDBエンジン保存の手順で使用できるパラメータが両方の入力値で与えているからPHPの手順)と出力(返す値を格納し,PHP);bindそのパラメータを使ってbindParamなbindValue.
1時間結合で複数の行を挿入するbindParam
を使用します:
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
最も共通の目的を使用してみてください bindValue
.
bindParam
二つのトリッキー又は予期せぬ挙動:
bindParam(':foo', 4, PDO::PARAM_INT)
な作業が必要になるので通過可変(参照)。bindParam(':foo', $value, PDO::PARAM_INT)
変化$value
を実行後にその文字列execute()
.そのためにはもちろん、生き生きと微妙なバグることが難しい場合があります。することができました。
ソース: http://php.net/manual/en/pdostatement.bindparam.php#94711
あなたは、もはや苦労する必要はありません。
$stmt = $pdo->prepare("SELECT * FROM someTable WHERE col = :val");
$stmt->execute([":val" => $bind]);
最も簡単な方法をこの視点による記憶行動のサポートに対するコミットメント:
bindParam:
参考bindValue:
変数