1 回答
TA贡献1873条经验 获得超9个赞
更新
我不确定你为什么要采用你所拥有的方法。不需要先给变量赋值,你可以直接调用这个过程,例如
$sql = "CALL `upload_image`('$path.$imageName', $_SESSION['uid'])";
$result = mysqli_query($con,$sql);
无论如何,最好使用准备好的语句来保护自己免受 SQL 注入。像这样的东西:
$stmt = $con->prepare("CALL `upload_image(?, ?)");
$stmt->bind_param("si", $path.$imageName, $_SESSION['uid']);
$stmt->execute();
$result = $stmt->get_result();
此外,您的存储过程只是一个语句,这意味着直接执行该语句会更好:
$stmt = $con->prepare("UPDATE user SET profile_image_path = ? WHERE id = ?;");
$stmt->bind_param("si", $path.$imageName, $_SESSION['uid']);
$stmt->execute();
$result = $stmt->get_result();
原答案
您的问题是您正在尝试运行不支持的三个单独的查询(每个都SET算作一个查询)mysqli_query。您有两个选择,可以使用mysqli_multi_query:
$sql="SET @p0='".$path.$imageName."'; SET @p1='".$_SESSION['uid']."'; CALL `upload_image`(@p0, @p1);";
$result = mysqli_multi_query($con,$sql);
或者您可以将它们作为三个单独的查询运行:
$sql="SET @p0='".$path.$imageName."'";
$result = mysqli_query($con,$sql);
$sql="SET @p1='".$_SESSION['uid']."'";
$result = mysqli_query($con,$sql);
$sql="CALL `upload_image`(@p0, @p1)";
$result = mysqli_query($con,$sql);
后者可能是首选,因为它mysqli_multi_query使您更容易受到 SQL 注入的攻击。
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报