2012-01-08 29 views
1

可能重複:
php warning mysql_fetch_assoc錯誤與mysql_fetch_assoc

我只是執行我的網站的一個簡單的一部分,只是需要一個變量從頭部(子編號),與數據庫檢查它然後輸出與變量相關的其他字段。

但是我得到這個錯誤 -

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/admin/public_html/report.php on line 14 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''/home/admin/public_html/log/log_274b43e6ad_New Text Document (7).txt.txt' at line 1 

下面是它做什麼可能是錯的所有

include 'connect_to_mysql.php'; 
$sql_header = mysql_query("SELECT * FROM system"); 
$header_array = mysql_fetch_assoc($sql_header); 
$total_scans = $header_array['total_scans']; 
$malware_detected = $header_array['malware_detected']; 
$total_users = $header_array['total_users']; 

$report_id = $_GET['log']; 
var_dump($report_id); 
$sql_report = mysql_query("SELECT * FROM logs WHERE log_name='$report_id"); 
var_dump($sql_report); 
$report_array = mysql_fetch_assoc($sql_report) or die(mysql_error()); 
$file_name = $report_array['file_name']; 
$file_size = $report_array['file_size']; 
$submission_date = $report_array['submission_date']; 
$result = $report_array['result']; 
$status = $report_array['status']; 

任何想法爲我的網頁的代碼?我已經嘗試了一切,並檢查了我的數據庫,所有的名稱都是正確的,所有的東西,我甚至檢查了數據庫中的$ report_id變量,它匹配,所以我不知道它爲什麼會得到一個錯誤。

感謝您的幫助

+0

只需爲var_dumps添加我獲取的字符串(72)「/ home/admin/public_html/log/log_274b43e6ad_New Text Document(7).txt.txt」爲$ report_id和我越來越 - 布爾(假)爲$ sql_report。如果有幫助,再次感謝 – Arken 2012-01-08 17:24:05

回答

4

你的代碼,它沒有做任何錯誤檢查,所以這是毫不奇怪的查詢打破靜默,當它失敗。檢查錯誤,它會告訴你什麼是錯誤的 - 如何做到這一點在manual on mysql_query()或這reference question.概述。例如:

$sql_report = mysql_query("SELECT * FROM logs WHERE log_name='$report_id"); 

// Bail out on error 
if (!$sql_report) 
    { 
    trigger_error("Database error: ".mysql_error(), E_USER_ERROR); 
    die(); 
    } 

在特定情況下,你缺少一個右'

WHERE log_name='$report_id") 

而且,你看代碼很容易受到SQL injection。你需要逃避每次使用像這樣的值:

$report_id = mysql_real_escape_string($_GET['log']); 

這個工作,你需要把每價值在查詢到的報價。

+0

好的謝謝,我現在就去做。現在只需添加它也可以,所以非常感謝。 – Arken 2012-01-08 17:36:56

0

您忘記了報價'$report_id'

0

這裏有兩兩件事你要注意:

1)與mysql_fetch_assoc警告()。 當傳遞給它的參數不是一個vaide mysql資源時,會發生這個警告,即mysql_connect()返回null對象(未能返回連接對象)。這是因爲傳遞給mysql_connect()的參數是錯誤的數據庫憑證。

這種情況下usualy使用

is_resource($con) 

呼叫如果$ con是一個有效的資源返回true traped。

2)錯誤描述中描述的錯誤是由於錯誤的查詢語法造成的。

"SELECT * FROM logs WHERE log_name='$report_id" 

在這裏,你中省略結束花了$ REPORT_ID

"SELECT * FROM logs WHERE log_name='$report_id'" 

3)數據庫訪問: accesing數據庫的generel方法是使用一個類,即通過訪問方法,如訪問數據庫的憑據setUname(),SetPasswd()等等,方法本身會修改,在傳遞給數據庫之前轉義和清理證書。 這將防止SQL注入攻擊

相關問題