mysqlのphpのpdoのプレースホルダに関するメモ
$conn = new PDO(省略); $sql = "INSERT INTO :tableName ( `id` , `name` ) VALUES ( :id , :values)"; $stmt = $conn->prepare($sql); $arr = array('tableName' => 'SOME_TABLE' , 'id' => '1', 'values' => 'some string'); $stmt->execute($arr); print_r($stmt->errorInfo());
ってやると、'SOME_TABLE'あたりでsyntax errorだとのたうち回る。
よく見ると、テーブル名をシングルクオートで囲っているのがエラーの原因らしく、
$tableName = "SOME_TABLE"; $sql = "INSERT INTO $tableName ( `id` , `date` ) VALUES ( :id , :values)";
などとしてやったらうまくいった。プレースホルダのそもそもの使い方を間違っているような気がした。
追記(9/23)
同じようなことなんだけど。mysqlの関数をプレースホルダに入れてやっても使えない。
こんな感じで配列作ってNOW()をクエリに渡そうとすると
$arr = array('tableName' => 'SOME_TABLE' , 'id' => '1', 'values' => 'NOW()');
関数が文字列になってしまい、クエリ自体が下記のようになる。
INSERT INTO SOME_TABLE ( `id` , `name` ) VALUES ( '1' , 'NOW()' )";
わざわざ全クエリをはき出して調べたんだから感謝しなさいうわなにをs(ry
SET GLOBAL general_log = 'ON';
※ただしmysql5.1.12以上に限る