1

そのため、最近 MySQLi の使用に切り替えました。それについていくつか質問があります。

データを取得するための現在のコードは

$current = "SELECT * FROM hi where username='me'";
$result = $connect->query($current) or die($mysqli->error.__LINE__);
$row = $result->fetch_assoc();

私のクエリの実行は

$current = "SELECT * FROM hi where username='me'"; $result = $connect->query($current) or die($mysqli->error.LINE ) ;

最初の質問、それは正しい方法ですか?

また、mysql_ メソッドよりも安全なのはどのような点ですか? (注射などを防げると聞きました)

最後に、現在 MySQLi を使用する以外に、他に何をすべきですか? 私のコードは十分に保護されていますか?

以前、mysql クエリで使用されるデータに対して mysql_real_escape_string(htmlspecialchars($string) を使用しましたが、引き続き使用する必要がありますか? 現在 MySQLi を使用しているためです。

サイトを安全に保つために、他に注意すべきことは何ですか? htmlspecialchars ユーザー入力はありますか?

ありがとう!

4

1 に答える 1

2

あなたのmysqli_query使用について:

また、mysql_ メソッドよりも安全なのはどのような点ですか? (注射などを防げると聞きました)

ここでは、ユーザー入力を使用しないため、インジェクションの問題はありません。したがって、 mysql_ またはmysqli_同等のようです。

インジェクションの問題について:

ただし、ユーザー入力 ($_POSTまたは$_GET変数など) を使用する必要がある場合は、準備済みステートメントを使用することをお勧めします。それらの構文は次のとおりです。

$query = SELECT * FROM mytable WHERE col1=? AND col2=?;
$stmt = $db->prepare($query);
$stmt->bind_param('ss',$_POST['col1'],$_POST['col2']);//I put 2 s because I want 2 params. s stands for strings, i for integer. For that part PHP and mysqli extension offers you two alternative syntaxes. They give the same result but it depends on what you understand the best.
  • 最初: を使用してbind_result。この関数は、実行前に呼び出す必要があります。パラメータで指定した変数に結果をバインドします。最初の列には最初の変数が入り、2 番目の列には 2 番目のパラメータが入ります...主な問題はfetch_allfetch_assocまたはfectch_object.

    $stmt->bindResult($array['col1'], $array['col2'], $array['col3']);
    $stmt->execute();
    while($stmt->fetch_assoc()){
       var_dump($array);
    }
    
  • 秒: を使用してget_resultmysqli_resultを使用するときに、すでに使用している API を使用できます$db->query()。これは、mysqlnd をドライバーとして使用する場合にのみ使用できます。php 5.3 以降の場合、これがデフォルトのドライバーですが、php 5.1 または 5.2 (基本的に、1&1 ホスティング サービスは 5.2 未満) では、常にそうであるとは限りません。

    $stmt->execute();
    $result = $stmt->get_result()->fetch_all();
    foreach($result as $row){
       //handle your rows
    }
    

エスケープについて:

mysql_real_escape_string(htmlspecialchars($string))

mysqli では、 を使用できますmysqli_real_escape_string。データベースに関しては、このhtmlspecialchars機能は役に立ちません。表示専用です。

于 2013-02-25T07:55:37.127 に答える