$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
,它的工作正常。
如何更正此问题?
答案 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();
希望这有帮助。