不可能的MySQL返回值

时间:2012-08-17 14:54:25

标签: php mysql

这个问题类似于这个问题:Why does mysql_query() return TRUE with a SELECT statement?。我在php中执行SELECT mysql查询,但它返回true。我现在已经开始了半个小时,我完全肯定它是一个选择查询,它返回true。类似问题的明显解决方法是检查连接是否仍然存在。对我来说不同的是,mysql_error是空的。以下是导致错误的代码部分:

public function query($query, $params = array())
{
    $params['prefix'] = 'unpirate_';

    foreach($params as $key => $param)
    {
        $query = str_replace('{' . $key . '}',
            mysql_real_escape_string($param), $query);
    }

    echo($query);
    return mysql_query($query, $this->conn) or $this->error($query);
}

public function fetch_all($query, $params = array())
{
    $result = $this->query($query, $params);

    if($result === true)
        die('"' . mysql_error() . '"');
    (...)
}

echo'd的查询是一个有效的查询(SELECT * FROM [table] WHERE event_id =“54”)并且echo的唯一其他内容是“”,因此结果为true并且mysql_error是空的。你们有什么想法发生了什么事吗?如果我的结论不对,请纠正我。

PHP版本:带有Suhosin-Patch(cli)的PHP 5.3.10-1ubuntu3.2(内置:2012年6月13日17:19:58)

MySQL版本:mysql Ver 14.14 Distrib 5.5.24,debian-linux-gnu(x86_64)使用readline 6.2

1 个答案:

答案 0 :(得分:5)

return mysql_query($query, $this->conn) or $this->error($query);

您的返回值是OR语句。

正在发生的事情是PHP正在评估OR并返回它的值,而不是代码本身;因为第一部分有数据,所以它评估为true,并返回一个布尔值true。

尝试:

$retVal = mysql_query($query, $this->conn);
if (false === $retVal) {
    return $this->error($query);
}
return $retVal;