有人可以解释为什么在设置新网站时出现此错误?以及如何解决它
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/sitename/public_html/cms/cms/admin/report.php on line 8
现在第8行的内容:
$report = mysql_real_escape_string( $report );
修改
<?php
require_once('auth.php'); require('core/plugin.php');
// session details are here
require('core/connection.php');
if($session_id == $session_id){
$report = $_POST['reportmsg'];
$report = strip_tags( $report );
$report = mysql_real_escape_string( $report );
$report = trim( $report );
if($report == ""){
die("textarea void");
exit();
} elseif($report == $report) {
$sql="INSERT INTO report (site_id, date, time, ticket_id, bug)
VALUES
(
'$session_id',
'$date',
'$time',
'$ticket_id',
'$report'
)";
if (!mysqli_query($con,$sql)) {
die("Failed to connect");
exit();
}
echo ("<font style='font-family:Tahoma;'>ticket sent</font>");
exit();
}
}
?>
答案 0 :(得分:4)
此函数会考虑您正在使用的数据库上的字符集(documentation),因此需要连接到数据库才能工作。在之前运行任何转义字符串:
mysql_connect('server','username','password');
或者,考虑不使用mysql_*
,因为它已弃用,可能不属于维护范围,可能会从未来的PHP版本中删除。您最好使用mysqli或PDO。
修改:您可能已在使用mysqli
由于您添加了代码,我注意到您的查询是使用mysqli_query
调用的。您可能使用mysqli
连接到数据库,在这种情况下,请更改以下行:
mysql_real_escape_string($report);
到这一行:
mysqli_real_escape_string($con,$report);
这是两个不同的API,不共享连接对象,因此您的mysql_*
函数无法使用mysqli_*
连接。
话虽如此,您最好使用prepared statements ...
转义的行和行可以使您的查询安全,但它们很昂贵,并在您的代码中引入boilerplate。
正如其他人所建议的那样,您可能希望改为准备好的陈述:
$stmt = mysqli_prepare($con, "INSERT INTO `report` (site_id, date, time, ticket_id, bug) VALUES (?,?,?,?,?)");
mysqli_stmt_bind_param($stmt, "issis", $session_id, $date, $time, $ticket_id, $report);
mysqli_stmt_execute($stmt);
在旁注上,重新:die()
和exit()
您在代码中使用了几次:
die("textarea void");
exit();
这两个函数是别名(die()
和exit()
执行完全相同的操作),并且您的代码永远不会到达exit()
。您可以在exit();
die();
语句
答案 1 :(得分:0)
根据文件http://www.php.net/manual/en/function.mysql-real-escape-string.php
A MySQL connection is required before using mysql_real_escape_string() otherwise an error of level E_WARNING is generated, and FALSE is returned. If link_identifier isn't defined, the last MySQL connection is used.
因此,我打赌你没有连接到你的数据库。
答案 2 :(得分:0)
根本不要使用此功能。至少直接在应用程序代码中。应该使用准备好的陈述。这是唯一合适的解决方案。
至于为什么会出现此错误,a manual page通常会解释您使用特定功能获得的每个错误。