2013-03-15 129 views
0

好吧我有我自己在這裏困惑。PHP錯誤代碼在哪裏查詢

我有這樣的代碼它的作品完美

$result = mysql_query("SELECT * FROM e_track_access_log WHERE member_id>0 ORDER BY  
datetime_accessed DESC LIMIT 0,20"); 
?> 
      <?php 
while($rows=mysql_fetch_array($result)){ 
?> 

我獲取所有的領域member_id大於0

所有我現在所做的是改變後,

$result = mysql_query("SELECT * FROM e_track_access_log WHERE dealer=Demo ORDER BY  
datetime_accessed DESC LIMIT 0,15"); 
?> 
      <?php 
while($rows=mysql_fetch_array($result)){ 
?> 

所有我想要它做的只是顯示其中有Demo的經銷商信息。

這是我收到

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in 
/home/www/controldemo.e-track.co.za/control_main.php on line 177 

回答

3

因爲demo是一個字符串,你應該用單引號把它包起來。

SELECT * 
FROM e_track_access_log 
WHERE dealer = 'Demo' 
ORDER BY datetime_accessed DESC 
LIMIT 0,15 

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+1

JW謝謝是的錯過了'Demo'part謝謝有時坐着看着你想念的東西基本的 – 2013-03-15 15:44:34

+0

不客氣':D' – 2013-03-15 15:45:58

3

您需要報價比較字符串錯誤:

$result = mysql_query("SELECT * FROM e_track_access_log WHERE dealer='Demo' ORDER BY datetime_accessed DESC LIMIT 0,20"); 

但要注意,在這種情況下不使用雙引號,否則將關閉當前mysql_query字符串參數。

無論如何,因爲它已經mentinoned,mysql_queryis deprecated。我建議你使用PDO這也將爲你提供更多的SQL注入安全性。

這裏它的用法的例子:

$mysqlString = 'mysql:' 
       .'host='.$yourHost.';' 
       .'dbname='.$yourDBName; 

$conn = new PDO($mysqlString, $yourUser, $yourPassword); 

$stmt = $conn->prepare(("SELECT * FROM e_track_access_log WHERE dealer=:dealer ORDER BY datetime_accessed DESC LIMIT 0,20"); 

$stmt->bindParam(':dealer', 'demo'); 

$stmt->execute(); 

$data = $query->fetchAll(PDO::FETCH_ASSOC); 
0

其實問題是,不加引號,MySQL將評估就像一列中的語句,列演示顯然並不在目前的範圍存在。查詢失敗,返回與此類似的錯誤:ERROR 1054 (42S22): Unknown column 'Demo' in 'where clause'。爲了避免這種情況,您需要使用錯誤檢查。

由於我們在這一章,讓我提醒你,mysql_ *函數將在未來被刪除,你不應該再使用它們。

由於以前的mysql錯誤,您的查詢結果爲false,因此您沒有資源但只有一個簡單的布爾值,因此您在php代碼中有錯誤,這也是因爲檢查缺乏。

避免這種情況的兩種可能性:檢查mysql錯誤,並檢查查詢函數返回的結果是否實際不爲假。