MySQL PDO不适用于整数

时间:2015-04-20 03:45:01

标签: php mysql pdo

我有一个基本功能,如下所示:

public function query($query, $params = []) {
        $statement = $this->db->prepare($query);

        // Bind parameters based on value's type
        foreach ($params as $key => $value) {
            if(is_int($value)) {
                $statement->bindParam($key + 1, $value, PDO::PARAM_INT);
            } else {
                $statement->bindParam($key + 1, $value, PDO::PARAM_STR);
            }
        }

        $statement->execute();

        return $statement;
}

无论出于何种原因,当我运行这样的事情时:

public static function photosByTag($tag, $user = null) {
    $db = new DBConnection();

    $query = "SELECT * FROM photos JOIN tags ON tags.photo = photos.pid WHERE tag LIKE ? AND owner = ?";
    $params = [$tag, $user];

    $result = $db->query($query, $params);
    return $result->fetchAll();
}

photosByTag('city', 1)

它不起作用。如果我将AND owner = ?替换为AND owner = 1,则可以正常使用。将整数绑定为params时有些错误,但我不知道是什么或为什么。

1 个答案:

答案 0 :(得分:2)

问题不在于绑定,而是循环。如果查看手册,bindParam(& $ variable)的第二个参数需要引用。一旦重新分配$ value,你的循环就会破坏该引用。解决方案是在$params[$key]

中使用$value代替bindParam()

当你可以使用execute()语句来绑定参数时,看起来有点冗余这样做。

$statement->execute($params);

让PDO处理它如何分配变量。您所做的只是检查提交的内容然后选择类型,您没有强制执行类型,因此它可能类似于PDO :: execute所执行的操作。