删除功能不起作用

时间:2017-06-01 05:59:27

标签: php sql

我正在使用php代码进行系统处理,但是使用SQL的删除功能无效。我不知道它为什么会发生。

以下是我的代码:

function deleteEmployee($params)
{
    $tid = $_SESSION['tmid'];
    $data = array();
    //print_R($_POST);die;
    $sql = "delete from `cusinfo` WHERE TICKET_ID='".$params["id"]."' AND AGENT_CODE_STAFF_ID IN (SELECT id FROM `users` where tm_groupid = '$tid')";
    echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data");
}

2 个答案:

答案 0 :(得分:1)

echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data");

在上面的行中,您是执行查询,echo它。但如果没有执行,你就是echo你自己的消息。这样可以防止您收到实际的错误消息。如果您要从TICKET_ID删除的行不能存在,则无法看到它,您只能看到自己的消息"error to delete employee data"

解决这个问题:

echo mysqli_error($this->conn);

这会给你连接错误。

或者:

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
if ($result) {
    echo "Record deleted successfully";
} else {
    echo "Error deleting record: " . $conn->error;
}

许多功能必须处理这些错误。 stackoverflow questionphp manualthis

答案 1 :(得分:1)

问题可能在echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data");

正如我在一篇评论中所说,用mysqli_error($ this-> conn)替换die字符串应该会显示错误。

然而,经过一些测试,我发现在回声中分配变量可能会产生奇怪的结果,我测试echo $test = "hello" or die("test");并发现屏幕上没有显示hellotest,显示1,这可能是布尔值true。

查看查询是否已执行的更好方法可能是:

    //other code that stayed the same
    $statement = mysqli_prepare($this->conn, "delete from `cusinfo` WHERE TICKET_ID=? AND AGENT_CODE_STAFF_ID IN (SELECT id FROM `users` where tm_groupid = ?)");
    $statement = mysqli_stmt_bind_param($this->conn, $params['id'], $tid); //
    $sql = msyqli_stmt_execute($statement); // returns either true or false
    if ($sql === true) {

        echo "Successfull"; // executing successfull code
    }
    else {
        var_dump(mysqli_stmt_error_list($statement)); // handling error
        die;
    }

这会以预期的方式处理一些sql错误(它们被'转储并死掉')。

使用预准备语句正确的方法意味着可以停止大多数sql注入,并且使用DELETE查询,您需要确保停止sql注入。

注意:我不是sql注射的专家 注2:虽然我会使用PDO作为准备好的陈述,但在我看来,使用PDO更合乎逻辑