php查询循环不工作

php查询循环不工作,php,mysql,Php,Mysql,我有以下代码: public function updateOrder($num, $ufood, $uquan) { $response = array(); mysql_query("SET NAMES 'utf8'"); foreach ($ufood as $index => $f) { $result = mysql_query("SELECT food, quantity, uquantity FROM table1 WHER

我有以下代码:

public function updateOrder($num, $ufood, $uquan) {
    $response = array();    

    mysql_query("SET NAMES 'utf8'");

    foreach ($ufood as $index => $f) {
        $result = mysql_query("SELECT food, quantity, uquantity FROM table1 WHERE food ='".$f."'") or die(mysql_error());  
        $no_of_rows = mysql_num_rows($result);

        $response['number rows'] = $no_of_rows;

        if ($no_of_rows>0) {
            while ($row = mysqli_fetch_array($result)); {
                if (!$row['uquantity']) {
                    $w = "INSERT INTO table1(uquantity) VALUES ('$uquan[$index]')";

                    mysql_query($w);
                    $e = (int)$row['quantity'];
                    $q = (int)$uquan[$index];
                    $sum = $e+$q;
                    $s = (string)$sum;
                    $d = "UPDATE table1 SET quantity = '$s' WHERE food = ".$row['$food']." ";
                    mysql_query($d);

                } else if($row['uquantity']) {
                    $c = (int)$row['uquantity'];
                    $q = (int)$uquan[$index];
                    $sumq = $c+$q;
                    $sq = (string)$sumq;
                    $d = "UPDATE table1 SET uquantity = '$sq' WHERE food = ".$row['$food']." ";
                }
            }
        } else {
            $string ="INSERT INTO table1(food,uquantity) VALUES ('".$f."','".$uquan[$index]."')";
            $z = mysql_query($string);      
        }
    }
}
嗯,我不能让它工作,我正在尝试各种各样的事情,但它不工作。 所以我有一些问题:

  • foreach
    while
    的这种结构有效吗

  • 虽然
    $result
    查询返回数据库中的一些行,但当我尝试使用
    $row['quantity']
    作为值时,我得到
    null

在这段代码中,我从android应用程序接收到一些数据,并尝试“查看”我的
db_表(table1)
中是否已经有食物类型的条目。如果有条目,我希望数据库将android发送的数量条目、数据与数据库中的条目相加,并更新字段。这是它的基本原理。但是正如我所说的,当我尝试使用来自数据库的数据时,我会得到空值


如果有人能给我一些提示,我真的被卡住了。

你的代码有很多问题。我将这个答案标记为CommunityWiki,并邀请其他人编辑和添加他们发现的内容

当你有这么多错误时,你也可以考虑投稿,直到你有一个更具体的问题。 坏变量插值 此行不会执行您希望它执行的操作:

$w = "INSERT INTO table1(uquantity) VALUES ('$uquan[$index]')";
这不是非常有效的PHP语法。您可以连接表达式:

$w = "INSERT INTO table1(uquantity) VALUES ('".$uquan[$index]."')";
也可以将表达式嵌入大括号中:

$w = "INSERT INTO table1(uquantity) VALUES ('{$uquan[$index]}')";
也可以使用查询参数占位符:

$w = "INSERT INTO table1(uquantity) VALUES (?)";
$stmt = mysqli_prepare($w) or die(mysqli_error());
$uqi = $uquan[$index];
mysqli_stmt_bind_param($stmt, "i", $uqi);
mysqli_stmt_execute($stmt);
混合MySQL API 您不能将
mysql\u query()
mysqli\u fetch\u array()混用。PHP有多个MySQL API,不能混用。您应该标准化使用MySQLIAPI,因为较旧的MySQLIAPI现在已不推荐使用

分号破坏while循环 while语句后面的分号使循环成为no op,当循环终止时,$行不包含任何内容

while ($row = mysqli_fetch_array($result)); {
应该是:

while ($row = mysqli_fetch_array($result)) {
不恰当地使用变量 在多个方面,使用单个带引号的变量引用$row键可能不是您的意思:

$d = "UPDATE table1 SET quantity = '$s' WHERE food = ".$row['$food']." ";
先前select查询的select列表中的列名为“food”,而不是“$food”

此外,即使您打算使用变量名$food作为键,将其放在单引号中也不会使用变量的值,它将是文本字符串“$food”

无法引用字符串文字? 此外,在SELECT查询中使用带引号的文本与食物列进行比较,这使我认为它可能是一个字符串

因此,更新应该类似于:

$d = "UPDATE table1 SET quantity = '$s' WHERE food = '".$row['food']."' ";
或:

或者最好使用参数和准备好的查询,这样就不需要担心引号或类型:

$d = "UPDATE table1 SET quantity = ? WHERE food = ?";
. . .
未能检查错误 每个查询都可能失败,原因可能是语法错误(例如,字符串没有引号),或者表中没有引用名称的列,或者权限问题等

运行SQL查询时,请始终检查查询函数的返回状态。如果出现错误,函数将返回
false
,如果发生错误,则必须检查错误消息

mysqli_query($mysqli, $d) or trigger_error(mysqli_error($mysqli), E_USER_ERROR);
无法执行更新
您的第二次更新将SQL查询字符串分配给变量$d,但随后根本不执行该更新查询

首先,您使用的是
mysql\u connect
,然后调用
mysqli\u fetch\u array
。您可能正在寻找
mysql\u fetch\u数组
。和是独立的扩展。注意while语句后面的分号-不应该在那里。thnx,我看到了你说的,我粘贴了一个代码,它被修改了很多次。但我的主要问题是,我没有得到$row['food']值等@user1732457:除非你纠正上述问题,否则代码根本无法工作,一旦你这样做了,任何进一步的问题都可能会得到解决。实际上,我改变了所有提到的内容,现在我得到了$row['food']的值,问题是这次更新查询不起作用。对于帮助,我的行仍然不会更新,但我纠正了许多错误
mysqli_query($mysqli, $d) or trigger_error(mysqli_error($mysqli), E_USER_ERROR);