我正在实施一个简单的代码来检查一封电子邮件是否已经在我的数据库中,以及它是否正在从数据库中删除它。但是,我收到此错误消息:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access
violation: 1064 You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'@gmail.com' at line 1 in /home/saintpao/public_html/deleteNewsletter.php:24 Stack
trace: #0 /home/saintpao/public_html/deleteNewsletter.php(24):
PDOStatement->execute() #1 {main} thrown in /home/saintpao/public_html
/deleteNewsletter.php on line 24
这是conectar.php
文件
$dbhost = "myHost";
$dbuser = "myUser";
$dbpass = "myPassword";
$dbname = "myDBName";
try {
$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(Exception $error) {
die("Error conexión BBDD " . $error->getMessage());
}
这是deleteNewsletter.php
文件:
function sanitazeEmail($email){
if(empty($email)){
return "";
}
$sanitized = filter_var($email, FILTER_SANITIZE_EMAIL);
if(filter_var($sanitized, FILTER_VALIDATE_EMAIL)){
return $sanitized;
}
return "";
}
$success = false;
$email = sanitazeEmail($_POST['email']);
if(!empty($email)){
require_once 'conectar.php';
$sql = "SELECT `email` FROM `emails` WHERE `email` = " . $email;
$statement = $db->prepare($sql);
if($statement->execute()){
$sql_delete = "DELETE FROM `emails` WHERE `email` =" . $email;
$statement = $db->prepare($sql_delete);
$success = $statement->execute();
}
}
与数据库的连接有效,因为我可以在其他文件中进行 SELECT 请愿,所以它一定是deleteNewsletter.php
文件有问题。知道出了什么问题吗?
你的错误是电子邮件是一个字符串,应该被引用。但是,您使用的是 PDO,您可以使用准备好的语句来避免此类错误:
$sql_delete = "DELETE FROM `emails` WHERE `email` = :email";
$statement = $db->prepare($sql_delete);
$sucess = $statement->execute([':email' => $email]);
请注意,您的select
查询并不是很有用,您可以直接进行delete
查询。请注意,$statement->execute()
返回的是语句,而不是结果。
正如@NigelRen 指出的那样,您可以$statement->rowCount()
用来检查一行是否被删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句