一个非常简单的查询不适用于PHP

时间:2010-12-14 20:20:46

标签: php mysql database

我对一个非常简单的查询有一点问题, 当我硬编码查询中的值时它的工作,但当我使用PHP变量什么都没有检索,我检查了很多东西,包括查询,数据库 值得一说的是,我通过POST从表单中获取变量,并检查我是否正在使用它们但是当我在查询中使用它们时它们不能正常工作:S

这是我的代码..PLZ我做错了什么?!!!!!!!!!!!

  <?php 

 $email = $_POST ['emailEnter'] ; 
$password = $_POST ['passwordEnter'];


$connection = mysql_connect('localhost','root','') ;

$db_selected = mysql_select_db("lab5" , $connection) ;

$query = 'select * From user where email="$email" and password="$password" ' ;
$result = mysql_query ($query , $connection);
    while($row=mysql_fetch_array($result))
    {
        echo $row['name'];
    }
mysql_close($connection);       
?>

9 个答案:

答案 0 :(得分:6)

您在查询变量中使用单引号。单引号不替换变量 - 因此它查找文字字符串$email而不是变量电子邮件。要么使用双引号,要么更好地使用PDO之类的东西来为你工作。

您还应该清理SQL / XSS漏洞的输入。

答案 1 :(得分:4)

基本的调试步骤是1.添加

if (!$result) echo "Error: ".mysql_error();

查看SQL查询中的任何错误和2.输出

echo "Query: $query";

查看变量包含的内容。其中一个会指出你的问题。

此外,您的查询容易受到SQL injection的攻击。你应该添加一个

$email = mysql_real_escape_string($email);
$password = mysql_real_escape_string($password );
从POST数组中获取值后

答案 2 :(得分:0)

您的错误可能在于您没有转义参数。

当你在这里时,使用MySQLi或PDO(甚至可能是一些准备好的语句)


有人提到你使用单引号,这是真正的错误,我的不好。

但我的建议仍然存在。使用准备好的陈述后,你不会因为这个错误而堕落

答案 3 :(得分:0)

$query = 'select * From user where email="' . $email . '" and password="'. $password . '" ' ;

$query = "select * From user where email='$email' and password='$password'" ;

答案 4 :(得分:0)

请改为尝试:

$query = "select * From user where email='" . $email . "' and password='" . $password . "';

然后立即改为:

$query = "select * From user where email='" . mysql_real_escape_string($email) . "' and password='" . mysql_real_escape_string($password) . "';

答案 5 :(得分:0)

尝试

$query = "SELECT * FROM user WHERE email = '".$email."' AND password = '".$password."'";

答案 6 :(得分:0)

你混淆了单引号和双引号

你有:

$query = 'select * From user where email="$email" and password="$password" ' ;

你想:

$query = "select * From user where email='$email' and password='$password' " ;

单引号在内部评估为什么。双引号将解析内部变量。还可以使用大括号{$ variable}语法。

其他海报使用mysql_real_escape或使用更新的mysqli或PDO的建议也很重要。至少在来自用户输入的参数上使用mysql_real_escape。

答案 7 :(得分:0)

问题在于引用变量的方式。假设$ email ='some@gmail.com'和$ password ='securenot'。

我们想要的是最终解释的字符串是以下

从用户中选择*,其中email ='some@gmail.com'和密码='securenot'

要实现这一目标,我们只需将$@gmail.com替换为$ email,将securenot替换为$ password并获取以下内容:

从用户中选择*,其中email ='$ email'和密码='$ password'。

然后在php代码中......

$ query =“select * from user where email ='$ email'and password ='$ password'”;

希望有所帮助

答案 8 :(得分:0)

mysql_fetch_assoc()用于关联数组。您不能将普通数组用作关联数组。

while($row=mysql_fetch_assoc($result))
{
   echo $row['name'];
}