-2

有人可以解释为什么在设置新网站时会出现此错误吗?以及如何解决

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:无法在第 8 行的 /home/sitename/public_html/cms/cms/admin/report.php 中建立到服务器的链接

现在第 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();
    }
}
?>
4

3 回答 3

4

您尚未建立与数据库的连接

此函数考虑了您正在使用的数据库上的字符集(文档),因此它需要连接到数据库才能工作。在任何转义字符串之前运行它:

mysql_connect('server','username','password');

或者,考虑不使用,mysql_*因为它已被弃用,可能无法维护,并且可能会从 PHP 的未来版本中删除。使用mysqliPDO可能会更好。

编辑:看起来你可能已经在使用mysqli

由于您添加了代码,我注意到您的查询是用mysqli_query. 您可能使用 连接到数据库mysqli,在这种情况下,请更改以下行:

mysql_real_escape_string($report);

到这一行:

mysqli_real_escape_string($con,$report);

这是两个不同的 API,不共享连接对象,因此您的mysql_*函数无法使用您的mysqli_*连接。

话虽如此,您最好使用准备好的语句......

转义的行和行可以使您的查询安全,但是它们很昂贵并且会在您的代码中引入样板。

正如其他人所建议的那样,您可能希望查看准备好的语句:

$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();

于 2013-08-14T10:23:15.330 回答
0

根本不要使用这个功能。至少直接在应用程序代码中。应该使用准备好的语句。这是唯一合适的解决方案。

至于您收到此错误的原因,手册页通常会解释您使用特定功能遇到的每个错误。

于 2013-08-14T17:56:44.427 回答
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.

因此,我敢打赌你没有连接到你的数据库。

于 2013-08-14T10:22:53.093 回答