php - MySQL PDO 不适用于整数

标签 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 = 1 替换 AND owner = ? 它工作正常。将整数绑定(bind)为参数时出现问题,但我不知道是什么原因。

最佳答案

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

中使用 $params[$key] 而不是 $value

当您可以只使用 execute() 语句来绑定(bind)参数时,这样做似乎有些多余。

$statement->execute($params);

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

关于php - MySQL PDO 不适用于整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738996/

相关文章:

php fwrite 不写入 öäü/utf8

php - 在 PHP : capture all outputs 中运行 Python 脚本

php - PHP 内置服务器错误日志位置是什么?

php - 我的 PHP 代码中的参数有问题,参数未定义

php - 什么是 PHP 的最佳 IDE?

php - 如何访问从 codeigniter 中的查询传递的数据

mysql - Ruby on Rails : +1 option/vote button error

php - 根据选择填充 php 内容的 jQuery 上下文菜单

php - PHP PDO 语句可以接受表名或列名作为参数吗?

php - PHP PDO 语句可以接受表名或列名作为参数吗?