PHP绑定for循环

时间:2015-12-17 23:09:19

标签: php pdo

我已根据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);
}

2 个答案:

答案 0 :(得分:0)

在我意识到$ DBH实际上是一个自定义类的实例之前,我已经到了这篇文章的末尾。我现在要把所有东西留在这里以防万一我错了,其中任何一个都有帮助。 BUT

我认为你唯一的问题是在for循环中 foreach ($bindnames as $key => &$bindname)应为foreach ($bindnames as $key => $bindname)

原始答案

你有没有尝试过一个更简单的例子。看起来你做错了很多事。

  1. $DBH->query($query);
  2. 如果你想稍后将params绑定到此,你应该准备:$sth = $DBH->prepare($query);

    1. foreach ($bindnames as $key => &$bindname) {
    2. 你确定你正在做你想的。我认为没有理由&$bindname它应该是$bindname

      1. $DBH->bind( $bindname,$bindvals[$key]);
      2. 该函数实际上是PDOStatement :: bindParam(),因此您应该调用$sth->bindParam($bindname,$bindvals[$key]);。其中$ sth是$DBH->prepare($query);

        的返回值
        1. $result=$DBH->resultset();
        2. 我需要更好地理解resultset方法的上下文。你在扩展PDO还是什么?

答案 1 :(得分:0)

不得不改变

$locn= "'" . $location . "%'"; 

$locn= $location . "%";

我意识到通过绑定,不需要单引号。