Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Melaksanakan Berbilang Pertanyaan dalam Pernyataan PDO Tunggal dengan PDO_MYSQL dan PDO_MYSQLND?

Bagaimanakah Saya Boleh Melaksanakan Berbilang Pertanyaan dalam Pernyataan PDO Tunggal dengan PDO_MYSQL dan PDO_MYSQLND?

Linda Hamilton
Linda Hamiltonasal
2024-12-24 07:10:17141semak imbas

How Can I Execute Multiple Queries in a Single PDO Statement with PDO_MYSQL and PDO_MYSQLND?

Sokongan PDO untuk Berbilang Pertanyaan dengan PDO_MYSQL dan PDO_MYSQLND

Walaupun PDO lazimnya tidak membenarkan berbilang pertanyaan dalam satu pernyataan, sambungan PDO_MYSQL dan PDO_MYSQLND menyediakan sokongan untuk this kefungsian.

PDO_MYSQLND sejak itu telah menggantikan PDO_MYSQL dalam PHP 5.3, dengan PDO_MYSQL kekal sebagai pemacu lalai untuk MySQL PDO. Untuk melaksanakan berbilang pertanyaan dengan PDO, keperluan berikut mesti dipenuhi:

  • PHP versi 5.3 atau lebih tinggi
  • MySQL Native Driver (mysqlnd) didayakan
  • Pernyataan yang disediakan yang ditiru , dengan PDO::ATTR_EMULATE_PREPARES ditetapkan kepada 1 (lalai untuk MySQL)

Menggunakan exec()

Kaedah exec() boleh melaksanakan berbilang pertanyaan apabila:

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');";

$db->exec($sql);

Kaedah ini terhad kepada melaksanakan pernyataan SQL dengan nilai malar.

Menggunakan Penyata Disediakan

Apabila data diperoleh daripada pembolehubah PHP, pernyataan yang disediakan mesti digunakan:

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES (:car1, :type1); INSERT INTO car(name, type) VALUES (:car2, :type2);";

$stmt = $db->prepare($sql);
$stmt->execute(["car1" => "brand1", "type1" => "coupe", "car2" => "brand2", "type2" => "coupe"]);

while ($stmt->nextRowset()) {
    echo $db->lastInsertId(); // as an example
}

Pendekatan ini membenarkan semakan ralat dan pengumpulan hasil pertanyaan melalui lelaran ke atas set baris.

Berhati-hati dengan Penyata Disediakan Ditiru

Apabila menggunakan kenyataan yang disediakan yang dicontohi, pastikan pengekodan dalam DSN (tersedia sejak PHP 5.3.6) sepadan dengan pengekodan data sebenar. Jika tidak, mungkin terdapat potensi untuk suntikan SQL dengan pengekodan tertentu.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Berbilang Pertanyaan dalam Pernyataan PDO Tunggal dengan PDO_MYSQL dan PDO_MYSQLND?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn