【问题标题】:Queries inside foreach how toforeach里面的查询怎么做
【发布时间】: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()

标签: php mysql arrays foreach


【解决方案1】:

您正在获取数据

$rows = $doit->fetch_assoc();

并在 if 条件中使用 $row。

if ($row['duck'] == $duck)

应该是

if ($rows['duck'] == $duck)

【讨论】:

    【解决方案2】:

    试试这个,它是$rows 而不是$row

        if ($rows['duck'] == $duck) {
            echo 'We got a duck!';
        } else {
            echo "We don't have a duck";
                      ^^^^^
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多