我已根据PHP function/procedure to bind question marks dynamically
上一个问题的建议重写了PDO功能我遇到的问题是返回的结果集是空的。 SQL查询是正确的他认为,当我手动运行它时,它会返回数据。
我怀疑for循环中的绑定是不正确的。
我可以请求
的指导1)如何将for循环中的数据与问号绑定? 2)如果我现在的方式不正确,如何绑定LIKE案例。
sample_sql_1="select f_name, age, address from table1 where l_name=? and dob >= ? and cty =?"
sample_sql_2="select * from table2 where cty LIKE ?"
$locn= "'" . $location . "%'";
pdo_db_query($sql_run,array(':empname'), array($locn));
function pdo_db_query($query, $bindnames = array(), $bindvals = array()) {
try {
# MySQL with PDO_MYSQL
$DBH = new DbConn();
$DBH->query($query);
foreach ($bindnames as $key => &$bindname) {
$DBH->bind( $bindname,$bindvals[$key]); // bind the value to the statement
}
$result=$DBH->resultset();
if($result){
var_dump($result);
}
# Close the connection
$DBH->CloseConnection();
} catch (PDOException $e) {
echo $e->getMessage();
var_dump($e->getMessage());
}
}
这是结果集函数
public function resultset() {
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
答案 0 :(得分:0)
在我意识到$ DBH实际上是一个自定义类的实例之前,我已经到了这篇文章的末尾。我现在要把所有东西留在这里以防万一我错了,其中任何一个都有帮助。 BUT
我认为你唯一的问题是在for循环中
foreach ($bindnames as $key => &$bindname)
应为foreach ($bindnames as $key => $bindname)
。
原始答案
你有没有尝试过一个更简单的例子。看起来你做错了很多事。
$DBH->query($query);
如果你想稍后将params绑定到此,你应该准备:$sth = $DBH->prepare($query);
foreach ($bindnames as $key => &$bindname) {
你确定你正在做你想的。我认为没有理由&$bindname
它应该是$bindname
。
$DBH->bind( $bindname,$bindvals[$key]);
该函数实际上是PDOStatement :: bindParam(),因此您应该调用$sth->bindParam($bindname,$bindvals[$key]);
。其中$ sth是$DBH->prepare($query);
$result=$DBH->resultset();
我需要更好地理解resultset
方法的上下文。你在扩展PDO还是什么?
答案 1 :(得分:0)
不得不改变
$locn= "'" . $location . "%'";
要
$locn= $location . "%";
我意识到通过绑定,不需要单引号。