SQL SELECT语句检查不使用PHP变量的重复电子邮件
我有一个订阅组件,它是一个简单的表单,如下所示:SQL SELECT语句检查不使用PHP变量的重复电子邮件,php,sql,variables,Php,Sql,Variables,我有一个订阅组件,它是一个简单的表单,如下所示: <form id="newsletter_subscribe"> <label class="label-margin">Email<span class="required-field">*</label> <input type="email" name="mailinglistEmail"> <input type="submit"
<form id="newsletter_subscribe">
<label class="label-margin">Email<span class="required-field">*</label>
<input type="email" name="mailinglistEmail">
<input type="submit" value="Subscribe" class="subscribe-button float-r">
<div class="clear_float"></div>
</form>
}))
现在在进程文件中,在插入数据库之前,我想检查电子邮件是否已经在数据库中!我试着这样做:
$data = json_decode(file_get_contents('php://input'), true);
$vMailinglistDate = date('Y-m-d');
$vMailinglistEmail = strtolower(trim($data['mailinglistEmail']));
$sql_mailinglist = "SELECT * FROM tblmailinglist WHERE MailinglistEmail = $vMailinglistEmail " ;
require('cms/inc-conn-tekiah.php');
$rs_mailinglist = mysqli_query($vConnTekiah, $sql_mailinglist);
$rs_mailinglistRows = mysqli_fetch_assoc($rs_mailinglist);
if ($rs_mailinglistRows === 0) {
require('inc-conn-tekiah.php');
require('inc-function-escapestring.php');
//FORMULATE THE INSERT STATEMENT
$sql_subscribe = sprintf("INSERT INTO tblmailinglist (MailinglistDate, MailinglistEmail) VALUES (%s, %s)",
escapestring($vConnTekiah, $vMailinglistDate, 'text'),
escapestring($vConnTekiah, $vMailinglistEmail, 'text')
);
$sql_subscribeResult = mysqli_query($vConnTekiah, $sql_subscribe);
。。。等。插入过程继续
在测试并试图找出为什么这不能产生我想要的结果之后,我发现这是因为来自查询的mysqli_结果为空!尽管我测试的电子邮件肯定已经在数据库中了
更多的测试表明,如果我使用这个select语句,并将我正在测试的电子邮件作为字符串用单引号输入,它工作得很好:
"SELECT * FROM tblmailinglist WHERE MailinglistEmail = 'test@gmail.com' ";
但是使用变量,SELECT语句输出一个字符串,该字符串看起来像这样,显然不起作用:
"SELECT * FROM tblmailinglist WHERE MailinglistEmail = test@gmail.com ";
我能看到的唯一区别是第一个版本中的单引号似乎使它起作用。但真正令人困惑的是,我在前面的SELECT语句中使用了变量,根本没有任何问题
因此,我的问题是,我应该采取什么方法来构造SELECT语句,以使用我拥有的信息(以测试是否已在数据库中的形式发送的电子邮件)来测试重复的电子邮件。第一种方法。这就是mysql中的语法。因此,请自己添加单引号
$sql_mailinglist = "SELECT * FROM tblmailinglist WHERE MailinglistEmail = '$vMailinglistEmail' " ;
^ ^
第一种方法。这就是mysql中的语法。因此,请自己添加单引号
$sql_mailinglist = "SELECT * FROM tblmailinglist WHERE MailinglistEmail = '$vMailinglistEmail' " ;
^ ^
完美的我试着把单引号连在一起,但那是一团糟。不知道为什么我没有想到像那样加入它们!非常感谢,太好了!我试着把单引号连在一起,但那是一团糟。不知道为什么我没有想到像那样加入它们!非常感谢你。