-2

新しい Web サイトをセットアップしているときにこのエラーが発生する理由を誰か説明できますか? そしてそれを解決する方法

警告: mysql_real_escape_string() [function.mysql-real-escape-string]: サーバーへのリンクを /home/sitename/public_html/cms/cms/admin/report.php 行 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();
    }
}
?>
4

3 に答える 3

4

データベースへの接続が確立されていません

この関数は、使用しているデータベースの文字セット (ドキュメント)を考慮に入れるため、動作させるにはデータベースへの接続が必要です。これをエスケープ文字列の前に実行します。

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

または、mysql_*非推奨であり、メンテナンスが終了し、PHP の将来のバージョンから削除される可能性があるため、使用しないことを検討してください。mysqliまたはPDOを使用したほうがよい場合があります。

編集:すでに使用しているようですmysqli

コードを追加したので、クエリが で呼び出されていることに気付きましたmysqli_query。を使用してデータベースに接続している可能性があります。mysqliその場合は、次の行を変更します。

mysql_real_escape_string($report);

この行に:

mysqli_real_escape_string($con,$report);

これらは 2 つの異なる 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);

ちなみに、re:die()exit()

コードでこれを数回使用します。

die("textarea void");
exit();

これら 2 つの関数はエイリアスであり (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 に答える