我最近才开始使用 PDO,没有太多经验,但我最近遇到了一个烦人的问题。
我正在尝试使用带有 fetch 语句的 bindValue 从数据库中检索信息。我得到的变量来自 GET,来自上一页。一切都很顺利,除了我猜它没有为其中一个 bindValue 分配正确的值。
PDO:
$stmt = $dbconnect->prepare('SELECT * FROM :table WHERE id=:id');
$stmt->bindValue(':table', $table);
$stmt->bindValue(':id', $id);
$stmt->execute();
$row = $stmt->fetch();
我知道 bindValue 和 bindParam 之间的区别。当我对表值进行硬编码时,代码工作正常。我已经用头撞墙了一个小时,但我似乎无法弄清楚。除了给我正确的语法之外,任何人都可以解释我的想法出了什么问题,因为此时我想不出一个原因,除了可能对字符串值的误解之外,为什么会出错。
也是为了将来我想知道SQL命令的确切内容。我试过这样做:
$SQL = 'SELECT * FROM :table WHERE id=:id';
$stmt = $dbconnect->prepare($SQL);
$stmt->bindValue(':table', $table);
$stmt->bindValue(':id', $id);
$stmt->execute();
$row = $stmt->fetch();
但这不会将变量值绑定到 SQL 变量。非常感谢您的帮助!
编辑: 我注意到我的帖子与常见问题解答帖子重复:常见问题解答。所以我的问题已经得到解答,但是我对 PDO 的洞察力不足以理解它。任何人都可以解释下一行代码会发生什么以及为什么会这样,从发布的链接中获得!
$field = "`".str_replace("`","``",$field)."`";
$sql = "SELECT * FROM t ORDER BY $field";
多亏了Silkfire ,我想出了修复方法。在插入 SQL 字符串之前,只需将字符串内容添加到 SQL 字符串中:
$SQL = 'SELECT * FROM '.$table.' WHERE id=:id';