-1

セキュリティ上の理由から、最初の準備済みステートメントを使用するように変換しました。私はそれをテストしましたが、動作しますが、コード自体に関するフィードバック (建設的な批判を歓迎します) を探していますが、かなり基本的なものであることは理解しています。また、いくつかのクエリがあります。

  1. mysqli_escape_string準備済みステートメントを使用する場合、使用する必要はないと言っているのは正しいですか?
  2. この機能を使用するmysqli_stmt_get_resultと、書く量が減り、効率的になりますか?
  3. 使用はmysqli_stmt_close必要ですか?この関数を使用しないと、そのスクリプト内で別の準備済みステートメントを作成できないというのは正しいですか?

これが私のコードです:

<?php
//prepared statement example
include 'database.php';
$query = "SELECT ID FROM users WHERE email = ?";
$email = 'myemail@gmail.com';
$statement = mysqli_stmt_init($connect);

mysqli_stmt_prepare($statement, $query);
mysqli_stmt_bind_param($statement, 's', $email);
mysqli_stmt_execute($statement);
mysqli_stmt_bind_result($statement, $id);
mysqli_stmt_fetch($statement);

echo $id;
?>
4

1 に答える 1

2

プリペアド ステートメントを使用する場合、mysqli_escape_string を使用する必要がないというのは正しいですか?

はい。あなたがそれを求めているのは悪い兆候です - つまり、そのすべての混乱がどのように機能するかを明確に理解していない.

mysqli_stmt_get_result 関数を使用すると、私がしなければならない書き込みの量が削減され、効果的になりますか?

はい。ただし、ここで悪いニュースがあります。常にサポートされているわけではありません。そのため、一部のインストールでは機能しません。

mysqli_stmt_close の使用は必要ですか? この関数を使用しないと、そのスクリプト内で別の準備済みステートメントを作成できないというのは正しいですか?

なんでだめなの。
別の準備済みステートメントをこの変数に単純に再作成できます。

ところで、 mysqli よりもPDOを使用することを強くお勧めします。より一貫性があり、ユーザーフレンドリーです。演算子
で使用するために配列をバインドしてみてください。IN()

結局、2 分の 1 のコードで済みます。

$stm = $pdo->prepare($query);
$stm->execute(array($email));
$id = $stm->fetchColumn();
于 2013-03-10T16:51:03.627 に答える