删除SQL命令

时间:2013-05-28 14:17:47

标签: php mysql

在使用PHP和MySQL时,我应用了DELETE命令:

$query="DELETE FROM email_list WHERE email ="."$email";
mysqli_query($dbc,$query);

它不起作用。 但是当我这样说时:

$query="DELETE FROM email_list WHERE email ='$email'";
mysqli_query($dbc,$query);

这很有效。我想知道为什么连接不起作用。这里$ dbc是我的数据库,$ email存储我要删除的电子邮件,而email_list是我在$ dbc数据库表中的表。

6 个答案:

答案 0 :(得分:5)

你的第一次构建会产生如下查询:

DELETE FROM email_list WHERE email =user@example.com

你的第二个结果是:

DELETE FROM email_list WHERE email ='user@example.com'

所以你告诉我!

答案 1 :(得分:2)

您的连接不起作用,因为它缺少单引号。正确的方法是这样做:

$query="DELETE FROM email_list WHERE email = '" . $email . "'";
mysqli_query($dbc,$query);

如果$email包含单引号,那么这是非常不安全的,会中断。

防止SQL注入

由于您已经在使用mysqli,因此您应该将查询修改为预先准备好的语句:

/* create a prepared statement */
if ($stmt = $mysqli->prepare("DELETE FROM email_list WHERE email = ?")) {
    /* bind parameters for markers */
    $stmt->bind_param("s", $email);

    /* execute query */
    $stmt->execute();

    /* close statement */
    $stmt->close();
}

了解更多here

这样可以立即保护您的脚本免受SQL injection的攻击,并使您远离报价逃避麻烦。

答案 2 :(得分:2)

您在第一次查询时错过了单引号。因此,假设$email包含值example@example.com,则$query评估为:

 DELETE FROM email_list WHERE email =example@example.com

你需要正确地说出来:

$query="DELETE FROM email_list WHERE email ='"."$email'";
$query="DELETE FROM email_list WHERE email ="."'$email'";

答案 3 :(得分:1)

$query = "DELETE FROM email_list WHERE email = '".$email."'";
mysqli_query($dbc,$query);

您必须在引号中将字符串放在引号中,但是您不需要引号来连接变量

答案 4 :(得分:1)

$email可能包含一个必须用引号括起来的字符串。你做了一些引用但是在变量名称周围,这没什么用。

错误:

$query="DELETE FROM email_list WHERE email ="."$email";

右:

$query="DELETE FROM email_list WHERE email ='".$email."'";

答案 5 :(得分:0)

这是正确的。这是因为您需要确保正确连接字符串!

$foo = "harry " . "styles";
echo $foo

仅输出harry styles。使用MySQL,您需要的命令是... WHERE email = 'email_address';,因此您需要确保正确创建字符串!

查看关于字符串连接的PHP手册页http://php.net/manual/en/language.operators.string.php