sql无法通过mysqli_multi_query执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql无法通过mysqli_multi_query执行相关的知识,希望对你有一定的参考价值。

我是新手使用mysqli_multi_query并且没有在php中花费大量时间。当我直接在我的数据库客户端(phpMyAdmin)中应用它时,我的sql成功,但它不会从我的PHP代码执行。从这个函数返回的意图是一个2项数组,其中填充了2个SELECT语句的结果,但它总是返回空。 (注意:连接成功; $ con在别处定义。)

function claimItem($key){
    //remove expiry, decrement quantity available, send Kate & Sasha an email.
    global $con;
    $sql = "SELECT A.name, B.name, C.quantity, B.id FROM invitees A, items B, invitees_items C WHERE C.activation_key = '$key' AND C.items_id = B.id AND C.invitees_id = A.id; SELECT @qnt := quantity, @itm := items_id FROM invitees_items WHERE `activation_key` = '$key'; UPDATE items SET num_available = GREATEST(num_available - @qnt, 0) WHERE id = @itm; UPDATE invitees_items SET expiry = null, activation_key = null WHERE activation_key = '$key';";

    $multiArr = array(array(), array());

    if (mysqli_multi_query($con,$sql)){
      $qcount = 0;
      do
        {
        // Store first result set
        $result=mysqli_store_result($con);
          // Fetch one and one row
          while ($row=mysqli_fetch_row($result))
            {
                array_push($multiArr[$qcount], $row);
            }
          // Free result set
          mysqli_free_result($result);

          $qcount++;
        }
      while (mysqli_next_result($con));
    }
    else {
        return "failure";
    }

    mysqli_close($con); 
    return $multiArr;
}
答案

变量名称存在一些问题。

有一个变量$multiArr被初始化,但是在结束之前不会被引用,返回它。这解释了为什么返回一个空数组。 (有一个不同的变量,名为$multiArray,在函数体中被引用)。

还有一个变量$qcount,它被初始化和引用。但是这个变量不会增加。相反,名为$count的另一个变量会增加。


在宣布mysqli_multi_query出现问题之前,我建议将其平掉。

代码似乎使用已知易受SQL注入攻击的模式。并且使用mysqli_multi_query对于邪恶的攻击大开眼界。

以上是关于sql无法通过mysqli_multi_query执行的主要内容,如果未能解决你的问题,请参考以下文章

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令

SQL——注入攻击——mysqli_multi_query()的使用

php 的 mysqli_multi_query 不工作

mysqli_multi_query数组问题

严格标准:mysqli_multi_query 出现 mysqli_next_result() 错误

PHP mysqli_multi_query 在while循环中的事务