【发布时间】:2014-02-26 20:56:17
【问题描述】:
这可能很奇怪,因为这是一个非常直接的情况,但由于某种原因不起作用
我有一个用于测试的数组,所以这是我的“数组”
$getData =
Array
(
[0] => Array
(
[id] => 5
[duck] => 3
)
[1] => Array
(
[id] => 8
[duck] => 6
)
)
那么我有一个如下的foreach...
foreach ($getData as $k => $v) {
$duck = $v['duck'];
$cn = conection();
$query = "select * from table where duck ='$duck'";
$doit = $cn->query($query);
$row = $doit->fetch_assoc();
if ($row['duck'] == $duck) {
echo "We got a duck!";
} else {
echo "We don't have a duck";
}
}
所以我的想法是我有 2 个带有值的子键的键...如果我只是想随心所欲地选择每个值,我得到 3 和 6 没有问题,但查询只会得到执行一次,所以它只检查数组中的第一个值,而忽略第二个值..为什么?..
整个想法是,在这种情况下...如果表中存在 DUCK,则只需更新该列,如果 DUCK 不存在则插入 DUCK...但问题是查询只执行一次,即使在 foreach 中有 6 个主键...这里只有 2 个键 0 和 1 .. 所以查询应该执行 2 次,因此 IF 语句应该在每次执行查询时检查,而是直接将我发送到 ELSE就像实际上鸭子确实存在时值不存在或不相等......
感谢您抽出宝贵时间。
好的,我试图加快速度似乎犯了一个错误,我以原始代码为例...所以这是我的实际代码... Joomla 2.5.X
foreach ($getData as $k => $v) {
$duck = $v['duck'];
$d = JFactory::getDbo();
$query = $d->getQuery(true);
$query
->select($d->quoteName(array('duck')))
->from($d->quoteName('#__ducks_items'))
->where($d->quoteName('duck') . ' = ' .$duck);
$d->setQuery($query);
$ress = $d->loadResult();
// print_r($k);
// print_r($ress);
if($ress == $sku) {
echo 'We have a duck: ' . $duck ;
} else {
echo 'A new duck has born: ' . $sku ;
}
print_r($getData);
}
希望对您有所帮助....
谢谢。
【问题讨论】:
-
如果那是您的确切代码,它应该会引发解析错误。看看底部附近的语法高亮(
'We don't have a duck')你需要转义' -
你真的不应该在每次迭代时打开和关闭连接
-
不,不是实际代码,感谢您注意到...只是一个错字,您可以看到我有很多...我只是想代表整个想法..
-
更不用说他正在使用
$rows = $doit->fetch_assoc();,但后来将其引用为if ($row['duck'] -
另外你不需要实际获取数据,你可以只计算结果(如果你使用 MySQLi 使用
mysqli_num_rows())