选择查询的PHP mySQL错误

时间:2013-09-15 16:18:24

标签: php mysql

很少有人在一开始就遇到同样的问题,但是,我正在重复这个问题,因为我似乎特定于电子邮件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脚本中工作。

4 个答案:

答案 0 :(得分:5)

xkcd

看起来你没有在变量周围加上正确的引号,但是你应该使用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_*函数并切换到MySQLiPDO