我已经有这个问题已经有一段时间了,想知道是否有人可以提供一些指导?我的PHP(版本5.5.35)/ MYSQL(版本5.7)代码如下,但在搜索解决方案之后,我不相信问题在于代码本身,并且可能是sql server的问题,尽管我和#39;我对此很新,所以不确定如何解决。
问题:
PHP / MYSQL查询(SELECT * FROM table)返回一个数组但是错过了浏览器中的第一行(除非我先在浏览器中加载 - 见下文)。包括之后的每一行,但总是错过第一行。
我已经多次在网上查看了这个,其原因通常是在PHP代码中并且调用了mysqli_fetch_array();'两次。然而,事实并非如此,无论如何都不会成为问题,因为下面的半解决方案表明了这一点。
临时解决方案:
我设法缩小范围并找到原因(至少是一个原因)。它似乎与我如何使用浏览器和命令行来处理请求有关。如果我创建一个SQL表并直接在命令行中执行select all命令,则表格在下面显示正常,但是当我在浏览器中加载时它会错过第一行。相反,如果我然后修改表(某种类型的alter table命令。例如添加列然后删除列命令,或创建一个全新的表)然后直接进入浏览器(在命令行中不选择all),它在包含第一行的浏览器中加载正常。然后,当我返回命令行并键入select all命令时,它显示带有警告的空集。然后我尝试显示警告,并说它丢失了连接?? !!
总而言之,命令行中的select all命令会导致浏览器加载结果但是缺少第一个;但是首先在浏览器中加载可以正常工作(所有行)但在...之后的命令行中显示空集
代码
PHP / SQL
<?php
require('../../connect.php');
$q = "SELECT * FROM table_1" or die("Unable to select data".mysqli_error($connection));
$r = mysqli_query($dbc, $q) or die("Unable to select data".mysqli_error($connection));
if ($r)
{
while( $row = mysqli_fetch_array( $r ))
{
echo '<br>'.$row['id'].'|'.$row['name'].'|'.$row['colour'].'|'.$row['price'];
}
}
mysqli_close( $dbc );
exit();
PHP Connect文件
<?php
$dbc = mysqli_connect('host', 'username', 'password')
OR die (mysqli_connect_error());
mysqli_select_db($dbc, 'database');
mysqli_set_charset( $dbc, 'utf8' );
?>
MYSQL
SELECT * FROM table;
ALTER TABLE table ADD COLUMN temp INT NOT NULL;
ALTER TABLE table DROP COLUMN temp;
实施例
在浏览器之前处理(SELECT * FROM table;)之前在命令行中执行相同的请求时
1 | object1 | yellow | £50
2 | object2 | blue | £100
3 | object3 | red | £60
在之后在浏览器中处理(SELECT * FROM table;)在命令行中执行相同的请求时
2 | object2 | blue | £100
3 | object3 | red | £60
命令行中的错误消息(首先在浏览器中加载时)
*Empty set, 26624 warnings (0.00 sec)*
SHOW WARNINGS;
*Error 2013 (HY000) Lost connection to MYSQL server during query*
答案 0 :(得分:0)
Error 2013
的可能答案:我不知道你正在运行什么php配置,但请看那里的内存设置。此外,您可能希望在查询中添加LIMIT
以限制结果数量,从而防止出现2013年错误。
同时测试以下内容:
SELECT * FROM table ORDER BY id ASC
看起来丢失的记录问题可能只是数据访问相关:SQL不保证每次都给出相同的记录顺序。因此,当它们已经在内存中时,可能首先在您通常看到的内存块之前可以使用不同的内存块。保证数据顺序的唯一方法是使用ORDER BY
。