PHPのbindParamをforeachするときの注意(foreachのvalueを参照渡しにする)
PDOのbindParamをforeachでまとめたい時がある。
$stmt->bindParam( ':name', $name, PDO::PARAM_STR );
$stmt->bindParam( ':title', $title, PDO::PARAM_STR );
$stmt->bindParam( ':tag', $tag, PDO::PARAM_STR );
foreachは下のようになる。
$array = array( ':name' => $name, ':title' => $title, ':tag' => $tag );
foreach ( $array as $key => &$value ) {
$stmt->bindParam( $key, $value, PDO::PARAM_STR );
}
unset( $array );
ポイントは2つ。
- foreachのvalueにアンパサンド(&)をつける
- foreachの後、foreachで用いた配列をunsetする
&記号をつけると、その変数はC言語と同じく参照渡しになる。
配列のポインタはforeachで回すとずれていくため、最後はunsetでポインタを戻す。&をつけない場合、foreachの最後の変数(上ではtag)のみがbindParamに渡され、nameとtitleのカラムにtagの値が入ってしまう。
unset
(PHP 4, PHP 5, PHP 7)
unset — 指定した変数の割当を解除する
void unset ( mixed $var [, mixed $... ] )
PDO
-
PDOでSQLデータをDELETE(削除)する0558
-
phpでファイルを削除する(unlink)0212