0

PHP を新しい形式に更新する必要がありますが、オンラインで提供されているコードと混同しています。現在、プレーンな mysql を使用していますが、mysqli に更新したいと考えています。私が持っているコードの1つの例を次に示します。

$checked= mysql_real_escape_string($_REQUEST["checked"]);

mysqli_real_escape_string を変更するだけの場合だと思いましたが、いくつかのサンプル コードを調べたところ、これが唯一の解決策ではないことがわかりました - mysqli::real_eacape と mysqli->real_escape もリストされています。どちらが正しいですか?

ありがとうございました

4

3 に答える 3

2

これを見てくださいhttp://php.net/manual/en/mysqli.quickstart.prepared-statements.php

プリペアド ステートメントは、データベース クエリをサニタイズする適切な方法であり、mysqli で推奨される方法です。

私の投稿へのコメントに答えるには:

それを呼び出すには、オブジェクト指向と手続き型の 2 つの方法があることに注意してください。

OOPの使用とは、最初に次のような mysqli オブジェクトを作成することを意味します。

$mysqli = new mysqli("localhost", "my_user", "my_password", "db");

次に、次のようにエスケープ関数を呼び出します。

$mysqli->real_escape_string($unchecked_string);

手続き型の方法は、最初に次のようにデータベースに接続することによって行われます。

$link = mysqli_connect("localhost", "my_user", "my_password", "db");

そして、次のようにエスケープ関数を呼び出します。

mysqli_real_escape_string($link, $unchecked_string);

OOP と準備済みステートメントを使用することは、mysqli を操作するための推奨される方法です。

于 2013-03-21T18:11:25.593 に答える
0

私は mysqli よりも PDO を好み、その準備されたステートメントは文字列を自動的にエスケープします。DB_NAME、DB_USER_NAME、および DB_USER_PASS に接続資格情報を入力するだけです。

$con = new PDO( 'mysql:host=localhost;dbname=DB_NAME;charset=UTF-8', 'DB_USER_NAME', 'DB_USER_PASS' );

$query = $con->prepare( "SELECT `field` FROM `tbl_name` WHERE `field` = ?" );
$query->bindValue( 1, $field_value );
$query->execute();

if( $query->rowCount() > 0 ) { # If rows are found for query
     echo "Field value found!";
}
else {
     echo "Field value not found!";
}

prepare および bindValue メソッドは、エスケープ データを自動的に処理します。

于 2013-03-21T18:12:39.567 に答える
-1

正しいのは手続き型です

mysqli_real_escape_string

およびOOPスタイルの場合

 $mysqli->real_escape_string()

ここで、$mysqliは単なる確率変数名です

于 2013-03-21T18:19:44.213 に答える