sql无法通过mysqli\u multi\u查询执行

1bqhqjot  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(340)

我刚开始使用mysqli\u multi\u查询,还没有花很多时间在php中。当我直接在db客户机(phpmyadmin)中应用sql时,它会成功,但它不会从php代码执行。此函数的返回是一个2项数组,其中填充了2条select语句的结果,但返回结果总是空的(注意:连接成功$con在别处有定义。)

  1. function claimItem($key){
  2. //remove expiry, decrement quantity available, send Kate & Sasha an email.
  3. global $con;
  4. $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';";
  5. $multiArr = array(array(), array());
  6. if (mysqli_multi_query($con,$sql)){
  7. $qcount = 0;
  8. do
  9. {
  10. // Store first result set
  11. $result=mysqli_store_result($con);
  12. // Fetch one and one row
  13. while ($row=mysqli_fetch_row($result))
  14. {
  15. array_push($multiArr[$qcount], $row);
  16. }
  17. // Free result set
  18. mysqli_free_result($result);
  19. $qcount++;
  20. }
  21. while (mysqli_next_result($con));
  22. }
  23. else {
  24. return "failure";
  25. }
  26. mysqli_close($con);
  27. return $multiArr;
  28. }
6qfn3psc

6qfn3psc1#

变量名有一些问题。
有一个变量 $multiArr 它被初始化,但是直到最后才被引用,在那里它被返回。这解释了返回空数组的原因(有一个不同的变量,叫做 $multiArray 在函数体中引用)。
还有一个变量 $qcount 已经初始化和引用了。但是这个变量不会递增。取而代之的是另一个变量,名为 $count 递增。
我建议你先把它摆平,然后再宣布它有问题 mysqli_multi_query .
代码似乎使用了一种已知易受sql注入攻击的模式。以及使用 mysqli_multi_query 对邪恶的行为敞开大门。

相关问题