0

MySQLiがPHPで記述したステートメントに関する非常に長い質問。ここに行きます。

MySQLiで準備されたSQLを使用すると、SQlインジェクションに完全に無防備になりますか?たとえば、以下の私のコードを参照してください。インジェクション保護なしでユーザーから直接$ _POST変数を使用できると考えるのは正しいですか?この質問の目的のために、データの検証を無視して、データベースの正しい形式であることを確認してください(とにかく私は常にそうします)。ここではセキュリティに重点を置いています。

$mysqli=new mysqli($host, $user, $password, $database);

$stmt=$mysqli->stmt_init();
$stmt->prepare('INSERT INTO `tablename` (`column`) VALUES (?)');

$stmt->bind_param('s', $_POST['value']);
$stmt->execute();

$stmt->close();
$mysqli->close();

また、私のコードは正しいですか?これは、MySQLiクラスを使用してプリペアドステートメントを作成したのは2回目または3回目です。それは動作しますが、私はすべてを正しく行っているのだろうかと思っていましたか?そのスクリプトのいずれかの部分が悪い習慣と見なされる可能性がありますか?

最後に、同じデータベース接続を使用する複数のプリペアドステートメントを実行するにはどうすればよいですか?$ stmtでclose()メソッドを使用してから、別の$ stmtクラスを初期化するだけですか?

ありがとう!

4

1 に答える 1

2

パラメータバインディングはSQLインジェクションに対して安全です。その部分について心配する必要はありません。これは、ユーザー入力を安全ではないSQLステートメントと連結しています。

于 2012-07-18T13:14:01.823 に答える