私はそのようなループを持っていました:
foreach($Fields as $Name => $Value){
$Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR);
}
複雑なことは何もありません。ただし、各値は配列の最後の値に設定されています($Fields
)。
どうすれば修正できますか?
しかし、この人たちに感謝します。私はあなたがそのような前に参照によって値を渡す必要があることを知りました&
:
foreach($Fields as $Name => &$Value){
$Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR);
}
これは私を狂わせていました。
PHP.netからの実際の引用:
Vili2010年5月28日12:01
これは機能します(参照による$ val):
<?php
foreach ($params as $key => &$val){
$sth->bindParam($key, $val);
}
?>
これは失敗します(bindParamには&$ variableが必要なため、値で$ val):
<?php
foreach ($params as $key => $val) {
$sth->bindParam($key, $val);
}
?>
クエリが実行される前に変数をバインドされたパラメータと同期させる機能が必要ない場合(私の経験では、99.9%の場合)、次のPDOStatement::bindValue()
代わりに単純に使用する方がおそらく良いでしょうPDOStatement::bindParam()
:
foreach ($Fields as $Name => $Value) {
$Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR);
}
この問題を取り除くためのもう1つの厄介なオプションがあります。
配列キーを繰り返し処理し、次のキーを使用して各値をパラメーターとして取得できます。
foreach(array_keys($params) as $key) {
$sth->bindParam($key, $params[$key]);
}