【发布时间】:2011-06-01 05:09:25
【问题描述】:
我正在尝试循环访问我的数据库中的一些数据,但它输出了两次。
$fields = 'field1, field2, field3, field4';
$idFields = 'id_field1, id_field2, id_field3, id_field4';
$tables = 'table1, table2, table3, table4';
$table = explode(', ', $tables);
$field = explode(', ', $fields);
$id = explode(', ', $idFields);
$str = 'Egg';
$i=0;
while ($i<4) {
$f = $field[$i];
$idd = $id[$i];
$sql = $writeConn->select()->from($table[$i], array($f, $idd))->where($f . " LIKE ?", '%' . $str . '%');
$string = '<a title="' . $str . '" href="' . $currentProductUrl . '">' . $str . '</a>';
$result = $writeConn->fetchAssoc($sql);
foreach ($result as $row) {
echo 'Success! Found ' . $str . ' in ' . $f . '. ID: ' . $row[$idd] . '.<br>';
}
$i++;
}
输出:
成功!在 field3 中找到 Egg。编号:5.
成功!在 field3 中找到 Egg。编号:5。
有人能解释一下为什么它会循环遍历索引和 关联值?
更新
我做了更多的尝试并尝试了以下操作。
$fields = 'field1, field2, field3, field4';
$idFields = 'id_field1, id_field2, id_field3, id_field4';
$tables = 'table1, table2, table3, table4';
$table = explode(', ', $tables);
$field = explode(', ', $fields);
$id = explode(', ', $idFields);
$str = 'Egg';
$i=0;
while ($i<4) {
$f = $field[$i];
$idd = $id[$i];
$sql = $writeConn->select()->from($table[$i], array($f, $idd))->where($f . " LIKE ?", '%' . $str . '%');
$string = '<a title="' . $str . '" href="' . $currentProductUrl . '">' . $str . '</a>';
$sth = $writeConn->prepare($sql);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo 'Success! Found ' . $str . ' in ' . $f . '. ID: ' . $row[$idd] . '.<br>';
}
$i++;
}
有趣的是,它会输出以下内容:
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:5.
成功!在 field3 中找到 Egg。编号:5.
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:5.
成功!在 field3 中找到 Egg。编号:5。
我还尝试将$i 添加到输出中,这会按预期输出2。
如果我将fetch(PDO::FETCH_BOTH) 更改为fetch(PDO::FETCH_ASSOC),输出如下:
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:E.
成功!在 field3 中找到 Egg。编号:5.
成功!在 field3 中找到 Egg。编号:5。
这件事困扰我太久了,所以如果有人能提供帮助,我将非常感激!
【问题讨论】:
-
在输出中添加 $i 的值可能有助于解决问题。 $i 不应该从 0 开始吗?
-
也许查询结果类似于左连接,并且为每个连接元素返回相同的元素
-
您有重复的行吗?这个查询在 phpMyAdmin(或类似的数据库管理工具)中输出什么?
-
@kinjal $i 输出 2,即使我将 $i 更改为从 0 开始。@Yanick 没有重复的行。 phpMyAdmin 中的输出符合预期。
-
所以你的第三次迭代返回 4 行,而其他 3 行什么也不返回?请注意,您为变量选择的名称会使代码不可读。两个问题:
$row是什么?from()的第二个参数是什么意思?
标签: php foreach associative-array zend-db