2013-10-07 49 views
-1

我在PHP新的,并用problem.Here奋斗是我的代码:为什么mysql_fetch_assoc()返回null? - 警告:mysql_fetch_assoc()预计参数1是资源,布尔给出

<?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(); 
?> 

然后,我通过尝试这种在我的本地主机这种方式:HTT ... /的getProducts-2.PHP登录=真正& USER_NAME =简&密码= 1234

然后我得到了错误:警告:mysql_fetch_assoc()预计参数1是资源,布尔在给定的C:\ wamp \ www \ getProducts-2.php on line 13

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

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

+0

你应该考虑使用'PDO'或'mysqli'。由于'mysql'在新版本中已被弃用。 – aaron

+0

在MySQL控制台或phpmyadmin中使用相同的查询。我认为,查询存在错误。 –

+0

这需要[Little Bobby Tables](http://xkcd.com/327/)的访问。另外,在'$ _GET'变量中传递密码? – MisterBla

回答

0

您的代码不检查mysql_query的返回值。它返回false,这意味着您的查询失败。

此外,

  • 你应该使用PDO,而不是MYSQL *
  • 你应该使用的,而不是你的代码,其中包含SQL注入
  • 你应该某处记录实际误差预处理语句。 mysql_error()或等价物应该告诉SQL中出了什么问题。

问题的根源在于你的SQL发送到mysql服务器有问题,或者它不匹配db/table结构。如上所示,当您对代码执行错误处理时,您会看到确切的原因。

+0

这将是一个评论,而不是回答 –

+0

@ Md.SahadatHossain嗯,它是一个问题的答案“这个代码有什么问题?” – eis

+0

if($ login)这是一个错误的使用?或者查询错误? – elfoz

0

由于字段名称或表名拼写错误,可能导致您的查询失败。如果查询失败,MySQL返回false。这就是为什么关于布尔值的错误信息。

另外的mysql_query被弃用:See alternatives here

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 
0

语法错误在你的SELECT查询时,您是从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"); 
+0

这不会更改错误,因为这警告如果语句代码:$ sql = mysql_query(“SELECT * FROM users WHERE user_name ='”。$ user_name。“'AND user_pass ='”。$ password。“'LIMIT 1”); \t \t $ output [] = mysql_fetch_assoc($ sql); – elfoz

相关问题