私のテーブルは以下のようなものです
CREATE TABLE IF NOT EXISTS BID_1s (
secId varchar(6) NOT NULL UNIQUE,
fhigh float,
flow float,
fopen float,
fclose float,
fdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(secId)
) ENGINE MEMORY;
コードは
$param = array(
":table" => $table, // $table = BID_1s
":secId" => $secId, //$secId = 4001
":fhigh" => $high, // $high = 22.65
":flow" => $low, // $low = 22.00
":fopen" => $open, // $open = 22.21
":fclose" => $close, //$close = 22.34
":fdate" => $tempDate, // $tempDate = 2014-12-00 00:00:00
);
$query .= "INSERT INTO :table (`secId`, `fhigh`, `flow`, `fopen`, `fclose`, `fdate`) "
. "VALUES (':secId', :fhigh, :flow, :fopen, :fclose, ':fdate') "
. "ON DUPLICATE KEY UPDATE "
. "fhigh=:fhigh, flow=:flow, fclose=:fclose, fopen=:fopen; \n";
$stmt = $this->dh->prepare($query);
foreach ($param as $param_key => $param_value) {
$stmt->bindParam($param_key, $param_value);
}
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($this -> dh -> errorInfo());
}
$exec = $stmt->execute();
プログラムを実行すると構文エラーが表示されます:
PHP 致命的なエラー: 例外 'PDOException' がキャッチされず、メッセージ 'SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。/var/www/htmlの ''2014-12-00 00:00:00' (
secId
,fhigh
,flow
,fopen
, ) VAL' at line 1' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してくださいfclose
。fdate
/storeSocketData/mysqlDriver.php:53
$tempDate に :table をバインドして、それに置き換えます。
これは PHP PDO のバグですか、それとも PDO でテーブル名をバインドできませんか?
バインドを使用せず、クエリで直接値を割り当てると、クエリは正常に機能します