mysql_real_eescape_string()[function.mysql real-eescape-stri



有人能解释为什么在建立新网站时会出现这个错误吗?以及如何解决

警告:mysql_real_eescape_string()[function.mysql real-eescape-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();
    }
}
?>

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

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

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_*连接。

话虽如此,你最好使用事先准备好的陈述

一行又一行的转义可以确保查询的安全,但它们代价高昂,并且会在代码中引入样板文件。

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

$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(); 之后的位置

根据文档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.

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

根本不要使用此函数。至少直接在应用程序代码中应该使用事先准备好的语句。这是唯一正确的解决方案。

至于为什么会出现这种错误,手册页面通常会对特定功能中出现的每个错误进行解释。

最新更新