Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中向SQL更新函数添加错误处理? 问题概述_Php_Mysqli - Fatal编程技术网

如何在PHP中向SQL更新函数添加错误处理? 问题概述

如何在PHP中向SQL更新函数添加错误处理? 问题概述,php,mysqli,Php,Mysqli,我有一个更新SQL数据库中用户用户名的函数。我试图添加一些错误处理(比如返回true/false),但我不知道如何去做 当前函数 函数updateUid($conn、$usersUid、$rowId){ $sql=“更新用户集usersUid=?其中usersId=?”; $stmt=mysqli\u stmt\u init($conn); 如果(!mysqli_stmt_prepare($stmt,$sql)){ //错误-错误的SQL调用 退出(); } mysqli_stmt_bind_p

我有一个更新SQL数据库中用户用户名的函数。我试图添加一些错误处理(比如返回true/false),但我不知道如何去做

当前函数
函数updateUid($conn、$usersUid、$rowId){
$sql=“更新用户集usersUid=?其中usersId=?”;
$stmt=mysqli\u stmt\u init($conn);
如果(!mysqli_stmt_prepare($stmt,$sql)){
//错误-错误的SQL调用
退出();
}
mysqli_stmt_bind_param($stmt,“ss”,$usersUid,$rowId);
mysqli_stmt_execute($stmt);
返回true;
mysqli_stmt_close($stmt);
}
正如你所看到的,现在它只是返回真的,不考虑天气或函数是否工作

我试过的 我尝试使用
mysqli\u stmt\u get\u result($stmt)
,但我认为我没有正确使用它:

函数updateUid($conn、$usersUid、$rowId){
$sql=“更新用户集usersUid=?其中usersId=?”;
$stmt=mysqli\u stmt\u init($conn);
如果(!mysqli_stmt_prepare($stmt,$sql)){
//错误-错误的SQL调用
退出();
}
mysqli_stmt_bind_param($stmt,“ss”,$usersUid,$rowId);
mysqli_stmt_execute($stmt);
$resultData=mysqli\u stmt\u get\u result($stmt);
如果($row=mysqli\u fetch\u assoc($resultData)){
返回$row;
}否则{
$result=false;
返回$result;
}
mysqli_stmt_close($stmt);
}
据我所知,
mysqli\u stmt\u get\u result()
没有返回任何内容,这是有道理的,因为我不是在获取数据,而是在放置数据

预期结果
如前所述,我真的希望能够得到关于函数是否工作的真/假返回。在PHP中测试SQL注入结果的最佳方法是什么?

mysqli\u stmt\u受影响的行()
将告诉您更新了多少行

<?php
function updateUid($conn, $usersUid, $rowId) {
    $sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        //error - bad SQL call
        exit();
    }
    mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_affected_rows($stmt) > 0;
    mysqli_stmt_close($stmt);
    return $result;
}

mysqli\u stmt\u close($stmt)return之后,code>将永远不会执行。为什么函数会返回true或false?这听起来是个糟糕的设计。如果函数起作用,则不应返回任何内容。如果失败,则也不应返回任何内容,代码应触发异常,mysqli会自动执行此操作。请删除所有的
If
语句,并启用自动错误报告,而不是
mysqli\u stmt\u close($stmt)是多余的。您的语句是在本地范围内创建的,不会泄漏到函数之外。你不需要关闭它,你将如何处理这个函数中的真/假值?