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

     2023-02-25     78

关键词:

【中文标题】相同的查询,相同的数据库,不同的结果【英文标题】:Same Query, Same Database, Different Results 【发布时间】:2014-07-06 01:19:11 【问题描述】:

我的想法完全被这个震撼了。当使用 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

【问题讨论】:

您是否在两者上运行相同版本和变体的 SQL? web 应用程序和 phpmyadmin 都与数据库(MySQL 5.5.37)在同一台服务器上,连接到 localhost。两者都使用 php-fpm。更令人难以置信的是,两者都在使用 mysqli 我试一试,但可能带有时间戳的WHERE 过滤器在 PHPMyadmin 和 mysqli 中的工作方式不同。我的意思是,PHPMyAdmin 可以以某种方式进行操作并显示正确的结果,而 mysqli 没有该功能。 phpmyadmin 也在使用 mysqli,根据 phpmyadmin 的首页。我也确实认为 phpmyadmin 可能以某种方式“纠正”了 sql 查询,但是使用肯定不会是错误语法的变体会产生相同的结果(请参阅我问题底部的编辑)。 我知道它们是同一个数据库,但我在问他们是否使用相同版本的 SQL(也就是用于解析语句并实际检索值的系统)。可能两者之一使用的是旧版本的 mysqli。 【参考方案1】:

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

如果你在这个 num_rows 工作时遇到问题,你必须先声明 ->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

【讨论】:

不幸的是,正如我的问题中提到的,我已经手动循环并计算返回的结果以检查它是否与 num_rows 有问题。 您是否检查了数据库用户的选择权限? 是的。在 PHP 和 phpmyadmin 中使用相同的用户。同一个用户也在网站的其他地方成功使用,事实上,在同一个文件中。【参考方案2】:

我已经设法“解决”了这个问题,但没有诊断出问题!

重启mysql服务器(service mysql restart)没用,但是重启服务器(reboot)可以。

我很遗憾这对导致问题的原因没有帮助。如果有人有什么想法,欢迎不吝赐教!

感谢您的回答,

克里斯

【讨论】:

它可能最终安装了所有需要重新启动的软件更新。 :P 我希望解决方案就这么简单!就在几天前,服务器是全新安装的,因为我从 Apache 2.2 切换到 2.4,mod_php 切换到 php-fpm,Ubuntu 12.10 切换到 14.04。有了所有这些变化,我认为新鲜可能更明智:)【参考方案3】:

PM;U 这样做的原因是您指向不同的数据库。

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

确保如果您正在从从站读取并在主站写入同步过程正常工作。

还要检查配置文件等。

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

希望对您有所帮助。

干杯, 耶稣

【讨论】:

PHP 和 MySQL 使用相同的查询显示不同的结果

...45【问题描述】:我有一个MySQL查询,直接在我的本地MySQL数据库上执行时可以正常工作,但通过PHP执行时显示不同的结果。SELECTa.id,a.title,a.public,a.sysstamp,a.password,t.thu 查看详情

PHP MySQL 相同的查询返回不同的行数

...】:2021-08-1707:37:54【问题描述】:我正在使用php和mysql从数据库中插入和选择数据。昨天我发现了一个新的“错误”,即:我在网站上使用了两次相同的查询——相同的查询——但结果不同当然我不明白为什么结果不同。甚至行... 查看详情

不同 Cassandra 节点中相同查询的不同结果

】不同Cassandra节点中相同查询的不同结果【英文标题】:DifferentresultsforsamequeryindifferentCassandranodes【发布时间】:2018-06-1905:37:57【问题描述】:我有3个cassandra节点,当我执行query时,2个节点给出相同的响应,但1个节点给出不同... 查看详情

相同的mysql查询在phpmyadmin的不同时间给出不同的结果

】相同的mysql查询在phpmyadmin的不同时间给出不同的结果【英文标题】:Samemysqlquerygivesdifferentresultsatdifferenttimesinphpmyadmin【发布时间】:2019-02-0617:28:33【问题描述】:我们正在通过phpmyadmin运行以下非常简单的mysql查询SELECT*FROMProcess... 查看详情

Doctrine ORM,两个不同的查询产生相同的结果集

】DoctrineORM,两个不同的查询产生相同的结果集【英文标题】:DoctrineORM,twodifferentquerysproducethesameresultset【发布时间】:2010-10-3122:36:56【问题描述】:我正在使用Doctrine1.2和Symfony1.4。在我的操作中,我有两个不同的查询返回不同... 查看详情

与相同的逻辑条件查询相比,HQL 查询返回不同的结果

】与相同的逻辑条件查询相比,HQL查询返回不同的结果【英文标题】:HQLqueryreturnsdifferentresultscomparingtosamelogiccriteriaquery【发布时间】:2020-03-0409:17:00【问题描述】:我需要一些HQL专家来帮助我处理复杂的查询。我的映射是Accounti... 查看详情

尝试查找不同数据时返回相同的结果

】尝试查找不同数据时返回相同的结果【英文标题】:Getbackthesameresultwhentryingtofinddifferentdata【发布时间】:2012-08-1502:59:10【问题描述】:我可以从下面的查询中获取每年的15/02-21/06日期范围数据。SELECT*FROMdim_dateWHEREEXTRACT(MONTHFROMd... 查看详情

两个不同的查询返回相同的对象 Spring Boot JPA

】两个不同的查询返回相同的对象SpringBootJPA【英文标题】:TwodifferentqueriesreturningthesameobjectSpringBootJPA【发布时间】:2021-12-2711:33:50【问题描述】:我创建了一个包含3个不同查询的存储库。每个查询返回不同的结果。但是当涉及... 查看详情

laravel orm:来自几乎相同查询的不同结果

】laravelorm:来自几乎相同查询的不同结果【英文标题】:laravelorm:differentresultfromalmostsamequery【发布时间】:2017-10-0512:05:55【问题描述】:我非常怀疑laravel是如何用于一个非常简单的事情的:如果我打电话:$companies=User::All();然... 查看详情

两个相似的 MySQL 查询给出不同的结果

...:2012-06-2913:56:26【问题描述】:我有一个保存设备读数的数据库。我正在尝试编写一个可以从设备中选择最新读数的查询。我有两个看似相同的查询,我希望给出相同的结果;但是他们没有。查询如下:第一个查询:selectmax(datet... 查看详情

相同的 Python 代码,相同的数据,不同机器上的不同结果

】相同的Python代码,相同的数据,不同机器上的不同结果【英文标题】:SamePythoncode,samedata,differentresultsondifferentmachines【发布时间】:2016-11-0817:54:17【问题描述】:我有一个很奇怪的问题,我在不同的机器上使用相同的代码和相... 查看详情

Google Location API vs. Maps:为啥相同的查询会产生不同的结果?

】GoogleLocationAPIvs.Maps:为啥相同的查询会产生不同的结果?【英文标题】:GoogleLocationAPIvs.Maps:Whyareidenticalqueriesyieldingdifferentresults?GoogleLocationAPIvs.Maps:为什么相同的查询会产生不同的结果?【发布时间】:2009-10-2207:56:56【问题描... 查看详情

CloudKit - 每次运行相同的查询时,CKQueryOperation 结果都不同

】CloudKit-每次运行相同的查询时,CKQueryOperation结果都不同【英文标题】:CloudKit-CKQueryOperationresultsdifferenteachtimethesamequeryisran【发布时间】:2015-06-3007:34:54【问题描述】:就是这种情况-我正在使用一个简单的UITableView来呈现来自Cl... 查看详情

Google 的 AutocompleteService 和 Autocomplete 使用相同的查询返回不同的结果

】Google的AutocompleteService和Autocomplete使用相同的查询返回不同的结果【英文标题】:Google\'sAutocompleteServiceandAutocompletereturningdifferentresultswithsamequery【发布时间】:2017-05-0809:59:59【问题描述】:我有以下查询,这是一个邮政编码:11... 查看详情

为啥相同的 SQL 查询可能在 SQL Developer 和代码中返回不同的结果?

】为啥相同的SQL查询可能在SQLDeveloper和代码中返回不同的结果?【英文标题】:WhymightthesameSQLqueryreturndifferentresultsinSQLDeveloperandincode?为什么相同的SQL查询可能在SQLDeveloper和代码中返回不同的结果?【发布时间】:2018-06-1917:31:24【... 查看详情

如何使用相同的语句和结果集运行多个选择查询? [复制]

...问题描述】:我正在尝试编写简单的JavaWeb应用程序来从数据库中获取数据。我需要在不同的数据库表上运行几个选择查询。StringqueryOne="selectfirstnamef 查看详情

T-SQL 和存储过程使用相同的查询给出不同的结果

】T-SQL和存储过程使用相同的查询给出不同的结果【英文标题】:T-SQLandStoredProceduregivesdifferentresultswithsamequery【发布时间】:2018-04-0618:20:55【问题描述】:我是组的新手。有一个奇怪的问题。我的T-SQL查询返回69行,但存储过程中... 查看详情

Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 结果不同

】LaravelQueryBuilder-相同查询的`where()`和`whereRaw()`结果不同【英文标题】:LaravelQueryBuilder-Differentresultwith`where()`and`whereRaw()`fortheidenticalQuery【发布时间】:2019-10-2216:17:06【问题描述】:我正在开发一个laravel应用程序,我有两个非常... 查看详情