在使用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数据库表中的表。
答案 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。