1

我的桌子如下

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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 /var/www/html 中的第 1 行的“2014-12-00 00:00:00”(、、、、、、、)VAL'附近使用secId正确fhigh的语法/storeSocketData/mysqlDriver.php:53flowfopenfclosefdate

如果您注意我的 $tempDate 与 :table 绑定并用它替换

这是 PHP PDO 中的错误还是我无法在 PDO 中绑定表名?

如果我不在查询中使用绑定和直接赋值,我的查询工作正常

4

0 回答 0