我正在为我的网站制作一个电子邮件验证表单,我需要检查一封电子邮件(存储在变量$email
中)和一个密钥(var $key
)是否对应于表' confirm
'我的数据库。
所以这是代码:
$check_key = $bdd -> exec("SELECT * FROM confirm WHERE 'email' = '$email' AND 'key' = '$key' LIMIT 1") or die(mysql_error());
要检查$chek_key
是否已填满相关行,我会尝试显示其内容:
while ($datas= $check_key->fetch()){
echo $data['key'];}
但没有出现......
我还尝试更改请求中的引号,如下所示:
$check_key = $bdd -> query("SELECT * FROM confirm WHERE 'email' = '$email' AND 'key' = '$key' LIMIT 1") or die(mysql_error());
但是我收到了这个错误:
语法错误或访问冲突:1064 SQL语法中出错;查看与您的MariaDB服务器版本相对应的手册,以便在' @ hotmail.com和' key'附近使用正确的语法。 = 43a1e442c3efdd259102f5d80af87e9c限制1'
我被困在这里,你有什么想法吗?
由于
答案 0 :(得分:0)
正确的mysql语句不要使用列名称
sudo
并且正如barmar所建议的那样使用backtics来保留像key
这样的保留字答案 1 :(得分:0)
替换代码
$check_key = $bdd -> exec("SELECT * FROM confirm WHERE 'email' = '$email' AND 'key' = '$key' LIMIT 1") or die(mysql_error());
使用
$check_key = $bdd -> exec("SELECT * FROM confirm WHERE email = '$email' AND key = '$key' LIMIT 1") or die(mysql_error());
和
while ($datas= $check_key->fetch()){
echo $data['key'];}
使用
while ($data= $check_key->fetch()){
echo $data['key'];}
答案 2 :(得分:0)
引用列名称时使用反引号,而不是单引号,因为单引号会创建字符串文字。
$check_key = $bdd -> query("SELECT * FROM confirm WHERE `email` = '$email' AND `key` = '$key' LIMIT 1") or die(mysql_error());
您还应该停止使用mysql_XXX
扩展程序。它已被弃用多年,并已完全从PHP 7.0中删除。您应该使用PDO或mysqli,并使用预准备语句来避免SQL注入。