使用MySQL查询检索带有特殊字符的电子邮件地址

时间:2013-09-08 00:20:11

标签: mysql email special-characters

我是PHP和Mysql的新手。我要问的问题是请求有人告诉我使用准备好的陈述,所以首先让我说我正在学习这个,但还没有完成。我有一个查询,查看电子邮件地址是否在数据库中。电子邮件地址可能包含不寻常的字符,如 - ,/ | “”等我似乎无法检索它们 - 这是我的代码(重复邮件来自一个表单)。与没有此字符的电子邮件地址完美配合。

            $checkemail = $_POST['repeatemail'];
    $checkemail = mysqli_real_escape_string($con, $checkemail);



    //Perform database to see if email exists
        $query  = "SELECT email FROM scorers WHERE email = '{$checkemail}'";
        $result = mysqli_query($con, $query);
        $row = mysqli_fetch_row($result);
        if ($row[0] == $checkemail){ 
                         echo "found";
                         } else {
                         echo "not found";
                         }

目前我已经想知道转义字符串是否正在剥离不寻常的字符,因此一旦它被查询它就被改变了,但事实似乎并非如此。此外,我输入像simon.o'malley@nhs.uk这样的地址没有问题,但是不能用上面的代码检查它们。看了很多关于UTF等的解释,但在这一点上它有点高于我的头脑。有人可以给我一个解决方案....如何更改上面的代码,以便它会挑选出这些时髦的电子邮件地址?非常感谢

2 个答案:

答案 0 :(得分:0)

知道了......这很好但是如果你们有任何重大问题请告诉我。它的魔术引号问题似乎是唯一的问题。所有其他角色看起来都很好

    $checkemail = $_POST['repeatemail'];
    $check_email_no_slashes = $checkemail;
    $checkemail = mysqli_real_escape_string($con, $checkemail);
    echo $check_email_no_slashes . "</br>";



    //Perform database to see if email exists
        $query  = "SELECT email FROM scorers WHERE email = '{$checkemail}'";
        $result = mysqli_query($con, $query);
        $row = mysqli_fetch_row($result);
        if ($row[0] == $check_email_no_slashes){ etc etc etc .......}

感谢您的投入Tim。

答案 1 :(得分:0)

您确实需要使用预准备语句。如果不这样做,则需要SQL注入问题(请参阅http://en.wikipedia.org/wiki/SQL_injection)。例如,我可以向您发送一个电子邮件地址,删除表中的所有行。

准备好的陈述并不难;这是一个例子:

$stmt = $mysqli->prepare("SELECT email FROM scorers WHERE email = ?")
// use the string in $checkemail in place of the ?
$stmt->bind_param("s", $checkemail);
// run the query
$stmt->execute();
// put the result into $email
$stmt->bind_result($email);
if ($stmt->fetch()) {
   // found a matching email; do something about it
}
$stmt->close();

您可以在PHP文档中阅读有关预准备语句的更多信息:http://php.net/manual/en/mysqli.prepare.php