我有一个非常奇怪的问题,在MySQL数据库上执行查询:
-
来自phpmyadmin:查询执行并返回良好结果
-
根据我的PHP脚本:查询执行,没有错误,行数不错,但表中显示的值中有近50%是错误的!
使用的SQL查询完全相同,相当长(250行),在phpmyadmin中执行需要26秒,并且运行良好。
在我的PHP脚本中,查询是用mysqli_query()
执行的,我想说的典型方式是:
if ($res=mysqli_query($mysqli,$q, MYSQLI_USE_RESULT)){
$data = array();
while ($row=mysqli_fetch_assoc($res)){
$data[] = $row;
}
mysqli_free_result($res);
var_dump($data);
}
在查询中,我将backtite:(`)替换为单引号:(')。
知道为什么它使用phpmyadmin,而不使用带有mysqli_query()
函数的PHP吗?顺便问一下phpmyadmin没有使用mysqli_query()
函数吗?
没有任何错误,我真的迷失在这里,如果有人有提示,我将不胜感激:)
Thx:)
最有可能的答案是查询之间存在差异。因为你无法轻易地在250行中找到差异。使用MySQL查询日志记录MySQL看到的两个查询,然后比较差异:
要在运行时禁用或启用常规查询日志或更改日志文件名,请使用全局general_log和general_log_file系统变量。将general_log设置为0(或OFF)可禁用日志,将其设置为1(或ON)可启用日志。将general_log_file设置为指定日志文件的名称。如果日志文件已打开,则会关闭该日志文件并打开新文件。
大致如下:
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file= 'querylog.log';
.. run queries
SET GLOBAL general_log = 'OFF';
请注意,这是一个全局设置,在启用日志的同时,服务器将记录来自所有客户端的查询。您的MySQL还需要超级权限来更改此设置。或者,您可以更改my.cnf配置文件并重新启动MySQL。
一旦您有了这两个查询,比较应该会显示差异所在,并引导您找到解决方案。
YAY在经历了几次头痛之后,我偶然解开了这个谜团,但我真的不知道为什么,但现在它工作得很好。
以下是我为使其发挥作用所做的一些小更改:
- 将PHP文件编码从UTF8更改为ISO-Latin1
- 重新键入所有非alphha字符以确保它们正常
在我的SQL查询中,我在where子句中签入的字符串上有重音,所以我尝试了这个。。
问题是,我在同一台服务器上有许多PHP文件,用UTF8编码,文本带有重音符号,效果非常好。
这里唯一的区别是,重音在我的SQL查询中,可能托管我网站的服务器没有正确处理UTF8字符,并且系统编码配置不好。。
可以肯定的是,我有一个终端访问服务器,我如何才能看到系统编码?
但问题解决了,一切都好!