【问题标题】:PDO sql syntax wrong?PDO sql语法错误?
【发布时间】:2014-02-06 14:47:01
【问题描述】:

我有名为 CMS 的数据库,有两列:iddata1

尝试从数据库中获取数据时,我收到以下代码的以下错误。

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在行的“表”附近使用正确的语法 1' 在 /var/pdo/index.php:4 堆栈跟踪:#0 /var/pdo/index.php(4): PDO->query('SELECT * FROM t...') #1 {main} 抛出 /var/pdo/index.php 第 4 行

为什么会出现这个错误?

这是我的代码:

<?php
    $db = new PDO('mysql:host=localhost;dbname=cms;charset=utf8', 'root', 'password');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $stmt = $db->query('SELECT * FROM table');

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['field1'];
    }
?>

【问题讨论】:

  • 不要使用表作为表名..
  • 您的数据库称为 CMS。表叫什么?

标签: php mysql sql pdo


【解决方案1】:

table 是保留字。有关完整列表,请参阅http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

如果您仍想使用表名“table”,可以使用反引号 (SELECT * FROM `table`)

【讨论】:

  • 确实是:reserved-words
  • 领先我 5 秒。
  • @bart2puck 你的回答更好,但因为`table` 会起作用。
  • @kelunik 忘了提到这一点。我已将其添加到我的答案中。感谢您的补充!
猜你喜欢
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2012-03-27
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
相关资源
最近更新 更多