foreach内部的查询如何

时间:2014-02-26 20:56:18

标签: php mysql arrays foreach

这可能很奇怪,因为这是一个非常直接的情况,但由于某种原因不起作用

我有一个测试数组,所以这里是我的“数组”

$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);
            }
希望这有帮助......

谢谢。

2 个答案:

答案 0 :(得分:1)

您将数据提取为

$rows = $doit->fetch_assoc();

并在if条件中使用$ row。

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

应该是

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

答案 1 :(得分:0)

试试这个,$rows不是$row

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