PHP/MySQL 查询电子邮件地址时出错

标签 php mysql

我一直在尝试使用以下语句查询电子邮件地址,但是在尝试成功转义字符串几个小时后,我已经接受了失败。

我使用的查询是:SELECT id, email FROM user WHERE email = '$email'

这给了我一个错误:

MySQL Error: 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

我确信这很简单..我似乎无法在任何有效的地方找到答案。

更新#1

我一直使用的代码是:

$email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3b5a59587b5c565a525715585456" rel="noreferrer noopener nofollow">[email protected]</a>";

$sql = "SELECT id, email FROM user WHERE email = '$email'";

$result = mysql_query($sql) or die('Unable to connect: '.mysql_error());

更新#2

电子邮件来自 Facebook connect API。

最佳答案

这可能是因为您从 Facebook 连接获得的电子邮件地址包含引号,例如类似的东西

"Harry"@gmail.com  
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f6be9784848fb6919b979f9ad895999b" rel="noreferrer noopener nofollow">[email protected]</a>"

从 Web 服务(或其他任何地方)提取数据时,您需要转义数据以防止 SQL injection ,以及像您的情况一样的乱码查询。

就您而言:

$email = mysql_real_escape_string($email);

关于PHP/MySQL 查询电子邮件地址时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042632/

相关文章:

php - 由于位数不同,sql 表中的时间查询不正确

mysql - 使用 ORM Doctrine 过滤数据库上的所有查询

php mysql foreach echo 错误

PHP MySQL 只显示表中有多个记录的唯一值

php - PHP SSH2 ssh2_connect

mysql - 在 MySQL 查询中创建 for 循环

MySQL 存储过程 - "You have an error in your SQL syntax"

mysql - 选择重复项并保留最旧的(不基于 ID)

javascript - 如何在悬停时弹出图像?

php - 是否存在将 Unicode 文本大写的可靠方法?