2012-01-08 70 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注入攻击

相关问题