准备语法错误SQLSTATE [42000]

时间:2013-05-30 11:17:01

标签: php sql syntax pdo

$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS);
$res = $tconn->prepare('SELECT * FROM :tbl');
$res->execute(array(':tbl'=>"ugb"));  

当我使用此代码从'ugb'表中绘制数据时,出现以下错误:

  带有消息'SQLSTATE [42000]的

'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在第1行''ugb'附近使用正确的语法

所以它正确地用:tbl替换'ugb'但是我是做绑定还是仅用数组执行,我总是得到一个错误。如果我只是做SELECT * FROM ugb,它的工作正常。

如何更正此问题?

2 个答案:

答案 0 :(得分:2)

PDO不允许您在FROM中设置变量。

您只能在查询字符串中添加表名。

我通常这样做:

$allowedTables = array('first', 'second', 'third');
if(in_array($tblName, $allowedTables)) {
  $$res = $tconn->prepare("SELECT * FROM $tblName");
}

答案 1 :(得分:-2)

我不认为PDO允许您将参数绑定到FROM语句。您可以尝试手动转义表名参数,然后将其添加到查询中,如下所示:

$table = "ugb";
$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS);
$res = $tconn->prepare('SELECT * FROM '. $tconn->quote($table));
$res->execute();

希望这有帮助。