ホームページ >データベース >mysql チュートリアル >MySQLi を使用した PHP でのプリペアド ステートメントの使用を最適化するにはどうすればよいですか?

MySQLi を使用した PHP でのプリペアド ステートメントの使用を最適化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-19 09:31:12881ブラウズ

How Can I Optimize Prepared Statement Usage in PHP with MySQLi?

MySQLi を使用した PHP でのプリペアド ステートメントの使用の最適化

コードにプリペアド ステートメントへのパラメーターのバインドが欠けているようです。 mysqli::prepare ドキュメントに従って、パラメータ マーカーはステートメントを実行する前にバインドする必要があります。

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

mysqli の利点

mysqli が唯一のライブラリではありません準備されたステートメントをサポートし、いくつかの機能を提供します利点:

  • セキュリティの向上: プリペアド ステートメントは、任意の SQL クエリの実行を防止することで SQL インジェクション攻撃から保護します。
  • パフォーマンスの強化: プリペアドステートメントは解析されたクエリを再利用するため、効率性。
  • エラー処理: 準備されたステートメントにより、より優れたエラー報告および処理機能が提供されます。

エラー処理を含む完全な例

これは、MySQLi を使用した PHP でプリペアド ステートメントを使用する完全な例です。エラーも含まれます。処理:

// Database connection
$mysqli = new mysqli("localhost", "root", "root", "test");

if ($mysqli->connect_errno) {
    echo "Failed to connect: " . $mysqli->connect_error;
    exit;
}

// Prepare statement
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Selection statement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE age = ?");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for selection
$age  = 1;
$stmt->bind_param('i', $age);

// Execute selection
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Fetch results
$result = $stmt->get_result();

if (!$result) {
    echo "Fetch failed: " . $stmt->error;
    exit;
}

while ($row = $result->fetch_assoc()) {
    echo $row['name'] . " " . $row['age'] . "<br>";
}

以上がMySQLi を使用した PHP でのプリペアド ステートメントの使用を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。