这个问题类似于这个问题: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
答案 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;