-2

これは私を夢中にしています。 私のPHPのバージョンは5.2.17で、MySQLのバージョンは5.1.59"mysql_real_escape_string"エラーDESPITEデータベースに接続中...何か間違っていますか?

私のjavascript(jqueryの)があるさ:

、ページの読み込みにAJAX呼び出し

マイ「file.phpで

$(document).ready(function(){$.post("file.php",{"dropTable":tableName}, function(data){});}); 

<?php 

     require_once"getDBParameters.php"; 

     $dbParameters = getDBParameters(); 
     if($dbc = mysqli_connect($dbParameters['db_host'], $dbParameters['db_username'], $dbParameters['db_pass'], $dbParameters['db_name'])){ 

      if(isset($_POST['dropTable'])){ 
       $dropTable= $_POST['dropTable'] ;    
       $escapedRealString = mysql_real_escape_string($dropTable, $dbc); 

       echo ($escapedRealString); 
       exit(); 
      } 
     } 
    ?> 

は、私が言ってPHPのエラーを取得:「次のコードが含まれてい

mysql_real_escape_string() expects parameter 2 to be resource, object given in file.php on line 9 

同じ接続は、私はプリペアドステートメントを使用している場合、私は、ユーザー入力に基づいてMySQLのテーブルをドロップしていますので、しかし、私はこのケースでプリペアドステートメントを使用することはできません完璧に動作します:

DROP TABLE $dropTable 

PHPマニュアルは言います

prepare("DROP TABLE ?") 

「getDBParameters」という関数がうまく動作していることが保証できます。 問題が何ですか?他の解決策?

+4

'この場合、私はユーザ入力に基づいてMYSQLテーブルを削除しているので、準備済みの文を使用することはできません。 –

+3

@Damien彼は少なくとも、きれいなインターフェースを提供しています。ボビーテーブルは必要ありません。 ; o) – deceze

+0

@DamienPirsy、はい...私が開発しているのは、私的なサイトのバックエンドです...そのユーザーはログインする人が1人しかいません...まだ、予防措置を取らなければならない...あなたの非常にありがとう非常に貴重なコメントth – dinchakpianist

答えて

5
mysqli_connect 
    ^
mysql_real_escape_string 
    ^

あなたはMySQLのIとMySQLの機能を混合しています。それらはまったく異なり、互換性のない拡張機能です。にする必要がある場合はmysqli::real_escape_stringを使用してください。

1

mysqli_connectを使用している場合は、mysqlエスケープ機能を使用できません。

mysqli_real_escape_stringも使用できます。

PHPのmysqlライブラリとmysqliライブラリは異なるため、パラメータタイプも同じです。 mysqlはresourceを使用し、mysqliはobjectです。

編集:前述のように、ユーザーの入力に基づいてテーブルを削除することは危険です。

関連する問題