Php 删除功能不工作
我正在用php代码做一个系统,但SQL的删除函数不起作用。我不知道为什么会发生这种情况 下面是我的代码:Php 删除功能不工作,php,sql,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
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");
}
在上面的一行中,您正在执行查询并echo
it。但是如果它没有被执行,你就是在回显你自己的信息。这将防止您收到实际的错误消息。如果您要从TICKET\u ID
中删除的行不存在,您无法看到它,您只能看到您的消息“删除员工数据时出错”
要解决这个问题:
echo mysqli_error($this->conn);
这将导致连接错误
或:
许多函数必须处理这些错误,和
在上面的一行中,您正在执行查询并echo
it。但是如果它没有被执行,你就是在回显你自己的信息。这将防止您收到实际的错误消息。如果您要从TICKET\u ID
中删除的行不存在,您无法看到它,您只能看到您的消息“删除员工数据时出错”
要解决这个问题:
echo mysqli_error($this->conn);
这将导致连接错误
或:
许多函数必须处理这些错误,而且。问题可能在以下行中:
echo$result=mysqli_query($this->conn,$sql)或die(“删除员工数据的错误”)代码>
正如我在一篇评论中所说,用mysqli_error($this->conn)替换die
字符串应该会显示一个错误
然而,在一些测试之后,我发现在echo中分配一个变量可能会产生奇怪的结果,我测试echo$test=“hello”或die(“test”)
并发现屏幕上既没有显示hello
也没有显示test
,但显示了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更符合逻辑。问题可能在于行echo$result=mysqli_query($this->conn,$sql)或die(“删除员工数据的错误”)代码>
正如我在一篇评论中所说,用mysqli_error($this->conn)替换die
字符串应该会显示一个错误
然而,在一些测试之后,我发现在echo中分配一个变量可能会产生奇怪的结果,我测试echo$test=“hello”或die(“test”)
并发现屏幕上既没有显示hello
也没有显示test
,但显示了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,但在我看来使用它更合乎逻辑“无法工作”并不是一个问题描述。为什么不起作用?将die
字符串替换为mysqli\u错误($this->conn)
。它应该告诉您是否有mysqlerror@Jelmergu,单击时仍不显示任何内容delete@Jelmergu,对不起,您已经解决了我的问题。我只是用mysqli\u错误($this->conn)
替换了die,然后它就正常工作了谢谢您的帮助:)“无法工作”不是问题描述。为什么不起作用?将die
字符串替换为mysqli\u错误($this->conn)
。它应该告诉您是否有mysqlerror@Jelmergu,单击时仍不显示任何内容delete@Jelmergu,对不起,您已经解决了我的问题。我只是用mysqli\u错误($this->conn)
替换了die,然后它就正常工作了谢谢你帮我:)你应该编辑PHP手册链接,转到mysqli\u error
,而不是一个不推荐的mysql\u error
@Jelmergu:谢谢你!你应该编辑PHP手册链接,转到mysqli\u错误
,而不是不推荐的mysql\u错误
@Jelmergu:谢谢你!