php - sql 无法通过 mysqli_multi_query 执行
问题描述
我是使用 mysqli_multi_query 的新手,并且没有在 php 中花费大量时间。当我直接在我的数据库客户端(phpMyAdmin)中应用它时,我的 sql 成功,但它不会从我的 php 代码中执行。此函数的返回旨在成为一个包含 2 个 SELECT 语句的结果的 2 项数组,但它总是返回空。(注意:连接成功;$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
对恶意攻击敞开大门。
推荐阅读
- kotlin - Kotlin 中的数学规则
- node.js - 使用 nodejs 从 Azure Keyvault 获取 Secret
- python - 宽度不等的“矩阵” - 循环的有效方法
- excel - Excel宏根据单元格值乘以行
- java - Java junit4有序测试方法运行
- python - Python 3.5+ 中类型提示的动态检查
- swift - Swift:将数据从 Firestore 获取到数组中的问题
- html - 如何删除标签和输入之间的额外空间?
- data-science - 需要Apriori算法专家
- javascript - Mat-Menu 项目未在 *ngFor 条件下动态显示(角度)