Irohabook
0
1255

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