我们假设我有一个这样的表:
+------+---------+--------------+-------------+---------------+
| 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.这里有什么问题?我错过了什么吗?提前谢谢。
答案 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
重置“指针”。