为什么BindValue在使用WHERE子句时不会产生结果?

时间:2012-06-26 17:40:22

标签: php pdo prepared-statement bindvalue

我不知道我在这里做错了什么。如果我在此查询中省略了WH WHERE子句,则服务器将返回数据库中的所有行。所以我知道这部分有效。如果我使用WHERE CLAUSE即

姓名=' $ name' AND loc =' $ loc' -

我得到了结果,但是当我使用bindValue或者如果我在执行命令中传递了绑定器时,我没有得到任何错误,也没有数据

    $stmt = "SELECT * FROM table1 LEFT JOIN table2 ON table1.ID=table2.fkID".
            " WHERE name = :name AND loc = :loc";

    $binder = array(':name' => $name, ':loc' => $loc);

如果采用那些参数的函数

public function fetchData($stmt, $binder = array())
    {
        $DB = new PDO(........);
        $STMT =  $DB->prepare($stmt);

        foreach ($binder as $key => $value):
            $k = (is_numeric($key)) ? $key + 1 : $key;
            if (is_int($value)):
                $STMT->bindValue($k, (int) $value, PDO::PARAM_INT);
            else:
                $STMT->bindValue($k, $value, PDO::PARAM_STR);
            endif;
        endforeach;

        try {
            $STMT->execute();
            return $STMT->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) {
            die($this->error = $e->getMessage());
        }

我在这里做错了什么。对不起,我搜索了所有相似的问题,但我没有答案。

1 个答案:

答案 0 :(得分:0)

我通过重新编写代码来解决这个问题:

foreach ($binder as $key => $value):
            $k = (is_numeric($key)) ? $key + 1 : $key;
            $v = $value;
            if (is_int($v)):
                $STMT->bindValue($k, (int) $v, PDO::PARAM_INT);
            else:
                $STMT->bindValue($k, $v, PDO::PARAM_STR);
            endif;
        endforeach;

请注意foreach语句中使用的$ v而不是原始$ value;