为什么mysql_fetch_assoc()返回null? -Warning:mysql_fetch_assoc()期望参数1是资源,布尔值是给定的

时间:2013-10-07 11:34:38

标签: php mysql

我是php的新手并且遇到问题。这是我的代码:

<?php 
 mysql_connect("127.0.0.1","root","root");
 mysql_select_db("gps");
 $login=$_GET["login"];
 $user_name=$_GET["user_name"];
 $password=$_GET["password"];
 if ($login)
 {
    $sql=mysql_query("SELECT * FROM users WHERE user_name='".$user_name."' AND  password='".$password."'  LIMIT 1");
    $output[]=mysql_fetch_assoc($sql);
 }
 else
 {
    $sql=mysql_query("SELECT name,device_id,lat,lon,user_name  FROM devices,users LIMIT 100");
    while($row=mysql_fetch_assoc($sql)) 
    {
         $output[]=$row;
    }
 }
 print(json_encode($output));
 mysql_close();
 ?>

然后我通过这种方式在我的localhost中尝试这个:htt ... / getProducts-2.php?login = true&amp; user_name = jane&amp; password = 1234

然后我收到了错误:警告:mysql_fetch_assoc()期望参数1是资源,布尔值在第13行的C:\ wamp \ www \ getProducts-2.php中给出

我该怎么办?这段代码有什么问题?

我解决了根据我的目的重新组织代码的问题,然后没有任何错误或警告。谢谢你的建议。

4 个答案:

答案 0 :(得分:0)

您的代码不会检查mysql_query的返回值。它返回false,表示您的查询失败。

此外,

  • 你应该使用PDO而不是mysql *
  • 你应该使用预备语句而不是你拥有的代码,其中包含sql injections
  • 你应该在某处记录实际的错误。 mysql_error()或等价物应该告诉SQL出错了什么。

问题的根本原因是您发送到mysql服务器的SQL有问题,或者它与db / table结构不匹配。当你对上面列出的代码实现错误处理时,你会看到确切的原因。

答案 1 :(得分:0)

由于字段或表名拼写错误,您的查询可能会失败。如果查询失败,则MySQL返回false。这就是关于boolean的错误消息。

不推荐使用mysql_query:See alternatives here

答案 2 :(得分:0)

使用此

   SELECT d.name,d.device_id,.lat,d.lon,u.user_name 
      FROM devices d,users u LIMIT 100

而不是

   SELECT name,device_id,lat,lon,user_name  
      FROM devices,users LIMIT 100

答案 3 :(得分:0)

SELECT查询中的

SYNTAX错误,您正在以错误的方式从2个表中选择行..

$sql=mysql_query("SELECT name,device_id,lat,lon,user_name  FROM devices,users LIMIT 100");

这应该是

$sql=mysql_query("SELECT devices.name, devices.device_id, devices.lat, devices.lon, users.user_name  FROM devices,users LIMIT 100");