Php foreach内部的查询如何

Php foreach内部的查询如何,php,mysql,arrays,foreach,Php,Mysql,Arrays,Foreach,问这个问题可能有点奇怪,因为这是一种非常直截了当的情况,但由于某些原因,它不起作用 我有一个用于测试的数组,所以这里是我的“数组” 所以我有一个理由如下 foreach ($getData as $k => $v) { $duck = $v['duck']; $cn = conection(); $query = "select * from table where duck ='$duck'"; $doit = $cn->query($query); $row = $doit-&

问这个问题可能有点奇怪,因为这是一种非常直截了当的情况,但由于某些原因,它不起作用

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

所以我有一个理由如下

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";
}
}
所以我的想法是,我有两个键和子键的值。。。如果我只是想随心所欲地对每个值进行hecho,那么我得到、3和6是没有问题的,但是查询只执行一次,因此它只检查数组中的第一个值,而忽略第二个值。。为什么

整个想法是在这种情况下。。。如果表中存在DUCK,则只需更新该列;如果DUCK不存在,则插入DUCK。。。但问题是查询只执行一次,即使foreach中有6个主键。。。这是仅有的两个键0和1。。因此,查询应该执行2次,因此每次执行查询时IF语句都应该进行检查,但它会将我直接发送到ELSE,比如值不存在或不相等,而实际上duck确实存在

感谢您抽出时间。

好吧,我似乎犯了一个错误,我试图加快我做了原始代码作为一个例子。。。这是我的实际代码。。。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);
            }
希望这有助于


谢谢。

您正在以

$rows = $doit->fetch_assoc();
并在if条件中使用$row

if ($row['duck'] == $duck)
应该是

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

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

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

如果这是您的确切代码,它应该抛出一个解析错误。查看底部突出显示的语法(
“我们没有鸭子”
)您需要避开
您真的不应该打开和关闭与每个站点的连接。不,这不是实际的代码,感谢您注意到。。。只是一个打字错误,你可以看到我有很多。。。我只是想表达整个想法……更不用说他正在使用
$rows=$doit->fetch_assoc()
但随后将其引用为
if($row['duck']
此外,您不需要实际获取数据,只需计算结果(如果您使用的是MySQLi use)
    if ($rows['duck'] == $duck) {
        echo 'We got a duck!';
    } else {
        echo "We don't have a duck";
                  ^^^^^
    }