PHP脚本中的SQL查询会“丢失”一行

时间:2016-02-12 11:17:01

标签: php mysql

我们假设我有一个这样的表:

+------+---------+--------------+-------------+---------------+
|   id |  tstamp |   product_id |        name | configuration |
+------+---------+--------------+-------------+---------------+
|   3  |      15 |           02 |        bike |        abc    |
|   2  |      16 |           03 |        car  |        dfg    |
|   1  |      11 |           04 |        tree |        ehg    |
+------+---------+--------------+-------------+---------------+

当我运行像

这样的简单查询时
SELECT id, tstamp, product_id, name, configuration
FROM tl_iso_product_collection_item
ORDER BY `id` DESC

返回3行。正如所料。工作,对吗?但是,如果我将此查询实现到PHP脚本并尝试获取行,那么总是缺少一个。总是。即使在最简单的查询中。我在哪里弄错了?

脚本看起来像这样:

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$connection = mysqli_connect('localhost', 'user', 'pw', 'db');

mysqli_set_charset($connection,"utf8");

$query = "SELECT id, tstamp, product_id, name, configuration
    FROM table
    ORDER BY `id` DESC "

$result = mysqli_query($connection, $query);

while ($row=mysqli_fetch_row($result)) {
echo $row[0];
echo $row[1];
echo $row[2];
echo $row[3];
echo $row[4];
}

mysqli_close($connection); 
?>

这将导致仅显示3行中的2行。我的问题是,为什么?如果我将上面的查询直接插入phpmyadmin它会显示3个结果,而不是2.这里有什么问题?我错过了什么吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

while ($row=mysqli_fetch_row($result_allgemein)) {

您正在为此处的每个查询结果提取第一条记录 - 因此当前记录的内部“指针”会前进到每个结果集中的第二条记录,因此当您使用

循环结果时
<?php
    $string = '12422: ( 0, 0, 0)   black 488568: (255,255,255) white';
    $newarray = array();
    preg_match_all('/([\d]*?):.*?\(.*?\)[ ]*?([^\d]*)/i', $string, $regs, PREG_SET_ORDER);
    for ($xi = 0; $xi < count($regs); $xi++) {
        $newarray[trim($regs[$xi][2])] = trim($regs[$xi][1]);
    }
    echo '<pre>'; var_dump($newarray); echo '</pre>';
?>

稍后,第一条记录当然会被省略。

如果您希望在已经获取第一条记录后获取所有记录,则需要使用mysqli_result::data_seek重置“指针”。