-2

SQLインジェクションを防ぐために私はこれを試しました:

$db = new myConnectDB();
                        
$beerName = mysql_real_escape_string($beerName);
$beerID = mysql_real_escape_string($beerID);
$brewery = mysql_real_escape_string($brewery);
$style = mysql_real_escape_string($style);
$userID = mysql_real_escape_string($userID);
$abv = mysql_real_escape_string($abv);
$ibu = mysql_real_escape_string($ibu);
$breweryID = mysql_real_escape_string($breweryID);
$icon = mysql_real_escape_string($icon);
                        
                        
$beerName = addslashes($beerName);
$brewery = addslashes($brewery);
$brewery = str_replace('\'', '', $brewery);
$query3 = "INSERT INTO uniqueBeers (userID,beerID,beerName,beerStyle,beerBrewery,abv,ibu,breweryID,icon, brewIcon) VALUES ($userID, '$beerID', '$beerName', '$style' , '$brewery', '$abv','$ibu','$breweryID', '$icon', '$iconBrew')";
$db->query($query3);

しかし、次のようなあらゆる種類のエラーが発生します。

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:ユーザーのアクセスが拒否されました

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:ユーザーのアクセスが拒否されました

エラーを読み、オンラインで調査を行った後、接続を渡すことができることに気付き、これを試しました。

$beerName = mysql_real_escape_string($beerName,$db);

上記のすべてのエントリに対して、しかしそれも機能しなかったので、今私は少し立ち往生しています。

アップデート:

これがmyConnectDBの内容であり、データベース情報が取り出されています

<?php

class myConnectDB extends mysqli{
    
    public function __construct($hostname='localhost',  
        $user='',
        $password='', 
        $dbname=''){
        parent::__construct($hostname, $user, $password, $dbname);
    }
}
?>
4

2 に答える 2

2

mysqli拡張機能を使用してDBに接続していますが(これが成功したと仮定して)、スクリプトの後半でMySQL関数を使用しています。同等のmysqli(手続き型)関数はmysqli_real_escape_string($ dbLink、$ stringToEscape)です-余分なものに注意してくださいi(改善のため)。ただし、mysqliオブジェクトがあるため、オブジェクト指向スタイルを使用する必要があります。

$beerName = $db->real_escape_string($beerName);  // OOP

また、上記を修正したら、次のコード行は必要ありません。

$beerName = addslashes($beerName);
$brewery = addslashes($brewery);
$brewery = str_replace('\'', '', $brewery);
于 2012-08-31T23:01:51.587 に答える
1

機能の順序を確認してください。まず、データベースへの有効なアクセス権が必要です。メッセージは、あなたが持っていないことを示し、コードは、あなたが開始$db = new myConnectDB();したが、データベースに接続したことがないことを示しています。

于 2012-08-31T22:55:16.987 に答える