MySQL DELETE无法处理变量


Mysqli DELETE not working with variable

我会直接进入它。使用php,如果我使用变量作为值,我会在从数据库中删除记录时遇到问题。下面的代码行工作得很好

mysqli_query($con,"DELETE FROM highScores WHERE Name='David'");

但是用户的名称会更改,因此我需要将其声明为变量。我试过各种各样的变化,但似乎都不起作用。我最近一次失败的尝试是下面的代码,这是我在插入时声明变量的方式。

mysqli_query($con,"DELETE FROM highScores WHERE Name='{$name}'");

在这种情况下,最好检查变量是否确实包含了您期望的内容。我还发现,回显整个查询字符串是找出查询不起作用的好方法。

$sqlquery = "DELETE FROM highScores WHERE Name='{$name}'";
// have a look at the query...
echo "<pre>$sqlquery</pre>";
// use it...
mysqli_query($conn,$sqlquery);

我应该警告您,如果$name来自不受信任的地方,例如公开可见的html表单,那么在查询中使用它之前,需要使其"安全"。查看"准备好的陈述"。一旦您知道您的代码正确地填充了您的变量,在将其放入查询之前,请确保它是安全的。

我不确定是否。。{$variable}在查询中有效。

我在查询中插入变量的方式称为集中。

mysqli_query($con,"DELETE FROM highScores WHERE Name='" . $name . "'");

句点将2个字符串加在一起。

但是,您尝试执行的操作很容易受到SQL注入的攻击。如果我是你,我会小心$name里面可能有什么。

编辑:我的错误,我习惯了一个为我插入引号的类。

试着让它运行:

mysqli_query($con,"DELETE FROM highScores WHERE Name='".$name."'");

请确保$name是像string(5) David一样格式正确的字符串,否则它可能不会导致所需的结果,甚至可能完全破坏您的查询。如果你放一个像这样的mysqli_real_escape_string,你可以确保这一点

$name = mysqli_real_escape_string($con,$name);

在执行查询

之前

我在搜索同一问题的解决方案时来到这里,但刚刚发现我的数据库用户没有删除权限。我早些时候出于安全考虑取消了这一特权。