2013-10-07 50 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

相關問題