1
$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
// Store the result (so you can get the properties, like num_rows)
$stmt->store_result();
// Get the number of rows
$amountOfRows = $stmt->num_rows;

// Bind the result to variables
$stmt->bind_result($id, $expire, $status, $db_username);
// Process the variables
while($stmt->fetch()) {
    printf("%d %s %s %s\n", $id, $expire, $status, $db_username);
}

追加する必要がありますか

$stmt->free_result();

どうですか

$stmt->close();

$mysqli->close();

質問 1: 答えはイエスだと思いますが、これら 3 つのそれぞれが何をするのかを知りたいので、それらの使用方法をよりよく理解することができます。

それらが何をするのか、なぜそれらが重要なのかを説明したドキュメントはあまり見つかりませんでした。

質問 2: 私のコードは額面どおりに問題なく動作しますが、これらを使用する利点は何ですか? データ管理、パフォーマンス、セキュリティ、SQL インジェクション...?

4

1 に答える 1

2

短い答え:重要ではありません

長い答え: 次のコマンドがメモリを解放すると思いました:

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

よくわからなかったので、調べてみました。

echo(memory_get_usage());  // returns 226472

$mysqli = new mysqli(/* credentials */);
$stmt = $mysqli->prepare("SELECT id, username FROM members");
$stmt->execute();
$stmt->store_result();
$amountOfRows = $stmt->num_rows;
$stmt->bind_result($id, $username);

while($stmt->fetch()) {
    printf("%d %s\n", $id, $username);
}

echo(memory_get_usage());  // now returns 230176 (gained 3704)

$stmt->free_result();
echo(memory_get_usage());  // returns 230176 (lost 0)

$stmt->close();
echo(memory_get_usage());  // returns 229816 (lost 360)

$mysqli->close();
echo(memory_get_usage());  // returns 229720 (lost 96)

$stmt->close()実際にメモリを$mysqli->close()解放しますが、それはほんの少しです。

これらの 2 ~ 3 行を記述しないことを選択したため、システムがこれ以上脆弱になることはありません。それらは(少し)メモリを解放するだけです。少なくとも$mysqli->close()コードに含める方が間違いなく優れたスタイルですが、それはあなた次第です。

評決:重要ではありません

于 2013-09-11T17:45:03.857 に答える