我正在使用PDO开发PostgreSQL应用程序。
问题是PDOStatement::bindValue
和PDOStatement::bindParam
的绑定功能根本不起作用。
我有以下代码:
<?php
try{
$db = new PDO("pgsql:dbname=test;host=localhost", "user", "password");
$all = '*';
$sql = $db->prepare("SELECT :all FROM schema.table");
$sql->bindValue(':all', $all);
var_dump($sql->queryString);
var_dump($sql->execute());
}
catch(PDOException $e){
print $e->getMessage();
}
?>
我无法理解$sql->queryString
的值仍为SELECT :all FROM schema.table
的原因,因为它var_dump()
'在这里。
PDOStatement::bindParam
完全相同。
任何提示?
编辑:此查询仅用于调试目的!请不要关心查询本身,而是关注不绑定的方法。
答案 0 :(得分:3)
准备好的陈述不能像那样工作。您只能绑定值,而不能绑定实体。
就您的陈述而言,您正在执行查询SELECT '*' FROM schema.table
,不,SELECT * FROM schema.table
如果你想要变量实体(这意味着大约80%的时间都存在设计缺陷),你将不得不求助于字符串插值(或连接 - 你明白了。)