很少有人在一开始就遇到同样的问题,但是,我正在重复这个问题,因为我似乎特定于电子邮件ID。
我有一个查询,在给定特定电子邮件ID作为输入的情况下检索密码。这是我的查询
Select Password from userauth where user_name in (select id from users where email = 's.sriram@example.com')
从phpMyAdmin完成此查询时没有任何问题。
但是,当我通过php脚本执行此操作时,它不起作用。那个php脚本如下:
<?php
// Grab User submitted information
$email = $_POST["users_email"];
$pass = $_POST["users_pass"];
// Connect to the database
$con= mysql_connect("localhost","root","sriram123");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Select the database to use
mysql_select_db("mydb",$con);
echo "Select Password from userauth where user_name in (select id from users where email = '$email')";
$result = mysql_query("Select Password from userauth where user_name in (select id from users where email = $email)");
if($result === FALSE) {
echo "Error Occured. ";
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result))
{
echo $row['Password'];
}
mysqli_close($con);
?>
现在,当我执行它时,我收到类似的错误消息:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行“@ example.com”附近使用正确的语法
我是PHP的新手,我只是不确定为什么这个东西在phpMyAdmin中有效,但无法在我的PHP脚本中工作。
答案 0 :(得分:5)
看起来你没有在变量周围加上正确的引号,但是你应该使用mysql_real_escape_string
来确保它在查询中使用它真的很安全。
答案 1 :(得分:2)
1)使用PDO
2)转义MYSQL名称(从 - >选择密码,从中选择“密码”)
3)引用变量($ email - &gt;'$ email')
4)永远不要公开您的密码($con= mysql_connect("localhost","root","PASSWORD");
)
从这开始:)
答案 2 :(得分:1)
$result = mysql_query("Select Password from userauth where user_name in
(select id from users where email = $email)");
如果$ email是a@b.com
,那就像是:
$result = mysql_query("Select Password from userauth where user_name in
(select id from users where email = a@b.com)");
您错过了电子邮件地址周围的''
,因为它是一个字符串。
此外,请始终使用mysql_real_escape_string
来转义放入查询中的每个外部字符串,否则您的网站将容易受SQL Injection attacks攻击。
答案 3 :(得分:0)
$email
变量周围没有正确的引号。尝试用单引号将它们包装起来。
将您的代码更改为:
$email = mysql_real_escape_string($email); //escaping
$query = "
SELECT Password
FROM userauth
WHERE user_name IN
(SELECT id
FROM users
WHERE email = '$email')
";
$result = mysql_query($query);
此外,您目前的MySQL查询容易受到SQL injection的影响,您应该查看escaping user input。更好的是,停止使用已弃用的mysql_*
函数并切换到MySQLi
或PDO
。