我使用以下程式執行在網易的PHP主機上,寫入json_test這個table 後,json_key & json_value 兩個欄位都是test2的值(正常應該是json_key:a2,json_value:test2才對),但在BlueHost上卻是正常的。
$sql="insert into json_test(json_key,json_value) values(:aa_key,:aa_value)";
$st=$pdo->prepare($sql);
$data=array("aa_key"=>"a2", "aa_value"=>"test2");
foreach ($data as $key => $value) {
$st->bindParam($key, $value);
}
$st->execute();
但使用以下卻可以正常
$sql="insert into json_test(json_key,json_value) values(:aa_key,:aa_value)";
$st=$pdo->prepare($sql);
$key="a1";$value="test1";
$st->bindParam("aa_key", $key);
$st->bindParam("aa_value", $value);
$st->execute();
請問這有可能是什麼設定造成的?
那是你誤會了 bindParam 的用法。
bindParam的用法是會跟你指定的變數做綁定變動。
你第一種寫法。變數非固定的,而是foreach出來的變數。
其最後結果就是
$key = 'aa_value';
$value = 'test2';
所以兩次都會是test2是很正常的事。
要用 bindParam 要注意,它不是所謂的給與值。而是一種綁定變數的做法。
至於另外一個為何可以這樣用我就不清楚了。
不過不正規的使用法我是採取,不能用只是剛好,能用你就得小心雷的想法。
不會去說或問為何他能這樣用沒事。