注意到sql查询语法中的一个小问题,以下是它的用法:
$email = "name_lastname@server.com";
$query = "Select * From Users Where email=".$email;
这不起作用,查询已经过测试并且工作正常,但这基本上演变为:
Select * FROM Users WHERE email=name_lastname@server.com ;
产生空结果。
为了以正确的方式执行它,我对我的$ email变量的语法添加了一个扭曲,基本上是:
$email = "\"name_lastname@server.com\"";
一旦我在字符串变量中指定了引号,那就是它按预期执行时会产生所需的结果。
我不确定这是否是最接近我的查询执行语法的审美方式,我确实认为有其他选择。感谢那些了解这个的人
答案 0 :(得分:3)
请改为尝试:
$query = "Select * From Users Where email='$email'";
或者:
$query = sprintf("Select * From Users Where email='%s'", $email);
或者:
许多其他方式......
答案 1 :(得分:2)
字符串查询需要围绕搜索条件的单引号。假设MySQL:http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html
答案 2 :(得分:1)
$email = "name_lastname@server.com";
$email = "'" . mysql_real_escape_string($email) . "'";
$query = "Select * From Users Where email=".$email;
答案 3 :(得分:1)
这样的非引用变量将被读作int。总是引用所有字符串。当单身就足够时,你不需要像双子座那样逃脱双打。
$query = "SELECT * From Users WHERE email= '".mysql_real_escape_string($email)."'";
答案 4 :(得分:0)
为什么不这样做:
$email = "name_lastname@server.com";
$query = "Select * From Users Where email = '$email'";
答案 5 :(得分:0)
您的解决方案得到了正确的原则:SQL需要将电子邮件地址括在引号中,因为它是一个字符串。我建议使代码更优雅只是将引号放在包含查询的字符串中,而不是包含电子邮件地址的字符串。
$email = "name_lastname@server.com";
$query = "Select * From Users Where email=\"".$email."\"";
引号不是电子邮件地址的一部分,它们是查询的一部分。如果您这样做,如果您尝试使用$email
用于其他内容,则不会有无关的引号,并且您不必记住在传递给其他人的每个其他电子邮件地址周围加上引号查询。
另外,你可能想要查看mysqli,它以稍微不同的方式处理查询,并作为副作用,消除了所有这些与转义字符串的愚弄。
PS - 我同意那些建议使用单引号而不是转义双引号的人。但SQL确实接受双引号(至少在我的系统上),所以我坚持你正在使用的约定。
答案 6 :(得分:0)
避免引用问题的最佳方法是在phpMyAdmin中准备语句,然后生成PHP源查询:
$email = "name_lastname@server.com";
$sql = 'SELECT * FROM `Users` WHERE `email` = '.$email;
更多信息:
http://www.packtpub.com/article/multi-table-query-generator-using-phpmyadmin-mysql