在查询中使用@符号时MySQL抛出错误

标签 mysql

我正在尝试检查用户数据库中是否已存在电子邮件地址。我正在使用 AJAX。当 SELECT 语句执行时,我总是返回一个错误。该语句似乎在 @ 符号处中断。

AJAX 调用:

var emailok = false;
var email = $('input[name="email"]');
$(function(){
        $.ajax({
                type: "POST",
                data: "email="+email.attr('value'),
                url: "check_email.php",
                success: function(data){
                    alert(data);
                    if(data != 0) {
                        emailok = false;
                        $('#exists_message').slideDown('slow').delay(3500).slideUp('slow');
                        for(i=0;i<4;i++) {
                            email.animate({
                                backgroundColor: '#AC0A0A'
                            },300).animate({
                                backgroundColor: '#FFFFFF'
                            },300);
                        }
                    } else {
                        emailok = true;
                    }
                }
           });

这是我的 check_email PHP 脚本:

<?php

include('connect.php');

$email = $_POST['email'];

try {
    $STH = $DBH->prepare("SELECT * FROM users WHERE email=$email");
    $STH->execute();
} catch(PDOException $e) {
    echo $e->getMessage();
}

$DBH = NULL;
$users =  $STH->fetchAll(PDO::FETCH_OBJ);

echo ' Matches - ' . sizeof($users);

?>

以防万一我的连接脚本有错误,这里是:

<?php

$host   = 'localhost';
$user   = '********';
$pass   = '********';
$dbname = 'tm';
try {
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(PDOException $e) {
    echo $e->getMessage();
}

?>

这是该警报中出现的错误:

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 '@asdf.asd' at line 1 Matches - 0

错误末尾的 0 是找到的具有该电子邮件地址的行数,因此该语句将执行。

我做错了什么?我一直使用 PDO 准备电子邮件地址,以前从未遇到过此错误。

编辑:为了避免收到更多此类评论,我知道我需要使用准备好的语句来防止 SQL 注入(inject)。我这样做只是为了测试。这是电子邮件变量周围缺少的单引号。感谢大家。 :)

最佳答案

字符串需要用单引号括起来,所以你的SQL应该是:

“SELECT * FROM users WHERE email='$email'”

关于在查询中使用@符号时MySQL抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11086597/

相关文章:

mysql - 外键来自 SQL 中一列中的两个表

php - Laravel PDO 异常

mysql:仅当日期每天至少存在一次时才需要记录,该日期应从当前日期时间起重复 4 天

Mysql 按两列排序,主要的和次要的

php - 如何在 Laravel 4 中使用 UPDATE 或 INSERT?

mysql - 连接两个表,按两个不同的列输入和排序

php - 通过 PHP/Html 和 sql 更新 MySQL 条目

PHP/MySQL 导航菜单

mysql - 使用 Powershell 中的参数执行 sql 过程

mysql - 优化mysql中连接 TableView 的索引