相同查询,相同数据库,不同结果

时间:2014-05-17 18:28:37

标签: php mysql mysqli phpmyadmin

我的思绪完全受到了吹嘘。使用mysqli_query()运行时,完全相同的查询返回零结果,但通过phpmyadmin获得预期的两个结果。我有双重和三重检查我正在运行相同的查询。

PHP:

$sql = "SELECT assignment_id, next_deadline FROM " . TBL_ASSIGNMENTS . " WHERE ( next_deadline >= $after_from AND next_deadline < $after_to ) OR ( next_deadline >= $before_from AND next_deadline < $before_to ) AND stage = 1";
$result = $db->query($sql);
if ( !$result )
{
    trigger_error($db->error(), E_USER_ERROR);
}

die('Count: '.$db->numRows($result).'<br /><br />'.$sql);

$ db对象是我长期使用的mysqli函数的简单包装器,所以问题不在那里。包装器正在其他地方进行类似的查询。

输出:

Count: 0

SELECT assignment_id, next_deadline FROM assignments WHERE ( next_deadline >= 1400306400 AND next_deadline < 1400310000 ) OR ( next_deadline >= 1400436000 AND next_deadline < 1400439600 ) AND stage = 1

然后我在phpmyadmin中运行相同的SQL查询(Ced + Ped),并获得预期的2个结果。

注意我也循环了结果并手动计算而不使用mysqli_num_rows,结果相同。

任何可能导致这种情况的想法?毕竟,phpmyadmin也通过PHP运行它们,我的思绪真的很震撼......

PS,请你怀疑包装器,这里是相关的功能:

function __construct(){ 
$this->link = mysqli_connect($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
mysqli_set_charset($this->link, 'utf8');
$this->config = $this->createConfig();
// tell the server to run the close function on script shutdown
register_shutdown_function(array(&$this, 'close'));
}
function query($query){
$this->lastQuery = $query;
$this->querycount++;
$timestart = microtime(true);
$result = mysqli_query($this->link, $query);
$querytime = microtime(true) - $timestart;
$this->querytotal = $this->querytotal + $querytime;
$this->queryarray[$this->querycount] = array('query' => $query, 'time' => $querytime);
return $result;
}
function numRows($result){
return mysqli_num_rows($result);
}

非常感谢您提供的任何帮助..

克里斯

编辑: 现在也尝试了同一个sql查询的变种无济于事,包括添加括号:

SELECT assignment_id, next_deadline FROM assignments WHERE ( ( next_deadline >= 1400306400 AND next_deadline < 1400310000 ) OR ( next_deadline >= 1400436000 AND next_deadline < 1400439600 ) ) AND stage = 1 

我还尝试将stage = 1移除到最后,以隔离问题,并自行运行每个括号,但没有运气。例如

SELECT assignment_id, next_deadline FROM assignments WHERE next_deadline >= 1400306400 AND next_deadline < 1400310000

3 个答案:

答案 0 :(得分:0)

来自PHP doc(http://www.php.net/manual/en/mysqli-result.num-rows.php):

如果您在使用num_rows时遇到问题,则必须先声明 - &gt; store_result()。

$mysqli = new mysqli("localhost","root", "", "tables");

$query = $mysqli->prepare("SELECT * FROM table1");
$query->execute();
$query->store_result();

在您的情况下,请考虑在http://www.php.net/manual/en/mysqli.store-result.php

中定义的程序样式

答案 1 :(得分:0)

我已设法'修复'这个,但没有诊断问题!

重新启动mysql服务器(service mysql restart)不起作用,但是重新启动服务器(重启)了。

我很遗憾这对导致这个问题的原因没有帮助。如果有人有任何想法,请随时启发!

感谢您的回答,

克里斯

答案 2 :(得分:0)

PM; U的原因是你指向不同的数据库。

SQL应始终具有相同的行为。

确保如果您正在从slave读取并在master中写入,则同步过程正常运行。

还要检查配置文件等。

要查看执行查询的位置,请在数据库服务器中使用mysqladmin监视活动。

希望得到这个帮助。

干杯, 耶稣