php - MySQL 对 INT 字段进行松散比较

标签 php mysql

我最近在 MySQL 中看到一些我认为很奇怪的东西,但是,我不确定是 MySQL 还是 PHP 这样做。

基本上我有这个使用 PDO 库的查询:

SELECT * FROM users WHERE id=:id OR email=:id

使用xxx@gmail.com的绑定(bind)参数作为:id。它能够找到emailNULLid0的记录。经过一番调查后,我发现这是因为进行了一些丢失转换,这意味着 xxx@gmail.com 被转换为 0(就像在 PHP 中一样)以进行比较使用 idid 字段是 INT

这是 MySQL 还是 PHP?有没有办法阻止使用 PHP PDO 驱动程序在 MySQL 中发生松散的强制转换和比较?

如果重要的话,我的表是 MyISAM。

编辑

使用的确切代码是:

$result = database::getInstance()->query("
    SELECT * FROM users WHERE partner_id = :id OR email = :id LIMIT 1",
    array(':id'=>$id)
);

其中 database 是一个单例实例,它将查询路由到 PDO 库。除了为我运行查询外,它不会对查询进行任何更改。我知道这部分是有效的,因为它经过了单元测试,并且可以与应用程序中的所有其他查询一起使用,这是唯一出现故障的查询。

以及查询函数中的代码:

        if($params===array()){
            $command=$this->_connection->prepare($sql);
        }else{
            $paramCount=0;

            // Then arguments have been supplied
            foreach($params as $field => $param){
                if(is_array($param)){
                    $values = $params[$field];
                    unset($params[$field]);

                    $fparams=array();
                    foreach($values as $value){
                        $fparams[]=$this->paramPrefix.$paramCount;
                        $params[$this->paramPrefix.$paramCount++]=$value;
                    }
                    $sql=str_replace($field,'('.implode(', ',$fparams).')',$sql);
                }
            }
            $command=$this->_connection->prepare($sql);
        }

        $command->setFetchMode(PDO::FETCH_ASSOC);
        foreach($params as $field=>$param)
            $command->bindValue($field,$param);
        $command->execute();
        return $command;

最佳答案

只需运行 SELECT 'string' = 0; 即可回答您的问题。

(进一步引用:它返回 1)

关于php - MySQL 对 INT 字段进行松散比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354224/

相关文章:

php - 如何获取尊重用户时区的日期和时间

mysql - 如何比较多个表列的多个值?

php - 使用SQL找出出现次数最多的词的最高频率

javascript - XMLHttpRequest, setRequestHeader 设置时 $_POST 为 null

php - 将索引数组转换为对象

php - $wpdb - 它在失败时返回什么?

mysql - Elasticsearch 5.5.2 - 解析查询失败

php - 如何更改 mongodb 中的集合结构?

php - 使用php将表从在线sql服务器复制到本地服务器

mysql - 从两个连接表中查询总和的性能最明智的查询