0
$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

我该如何纠正这个问题?

4

2 回答 2

2

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

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

我通常这样做:

$allowedTables = array('first', 'second', 'third');
if(in_array($tblName, $allowedTables)) {
  $$res = $tconn->prepare("SELECT * FROM $tblName");
}
于 2013-05-30T11:22:31.587 回答
-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();

希望这可以帮助。

于 2013-05-30T11:33:09.000 回答