Rumah  >  Soal Jawab  >  teks badan

Jalankan berbilang pertanyaan MYSQL menggunakan PHP

Saya cuba menjalankan pernyataan MYSQL berturut-turut menggunakan PHP seperti yang ditunjukkan dalam coretan kod di bawah (ia hanya menyalin satu baris ke yang lain dan menamakan semula id melalui jadual tmp).

Saya mendapat mesej ralat sintaks pendua. Saya telah mencuba banyak lelaran. Kod itu kelihatan seperti kod yang saya pelajari dalam manual PHP dan soalan mysql lain tentang SO (tidak termasuk dimensi php).

Bolehkah sesiapa menjelaskan mengapa sintaks php saya tidak betul?

include("databaseconnect.php");// This obviously works. Used a zillion time

$sql ="CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id 
 = 1;";
$sql.="UPDATE tmp SET id=100 WHERE id = 1;";
$sql.="INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100;";


if ($conn->query($sql) === TRUE) 
 {
  echo "Table row copied successfully. Do something with it";
 } 
 else 
 {
  echo "Error creating table: " . $conn->error;
  //close connection etc
 }

Pemulangan mesej PHP:

Ralat membuat jadual: Terdapat ralat dalam sintaks SQL anda semak manual untuk versi pelayan MariaDB anda untuk baris 1 berhampiran "KEMASKINI tmp SET id=100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t" Betul sintaks untuk digunakan

P粉358281574P粉358281574330 hari yang lalu656

membalas semua(1)saya akan balas

  • P粉659518294

    P粉6595182942023-10-26 10:17:07

    Jangan jalankan banyak pertanyaan sekaligus. Selalunya kejayaan salah satu daripada operasi ini bergantung pada semua operasi lain yang dilakukan dengan betul, jadi apabila sesuatu berlaku, anda tidak boleh teruskan seolah-olah tiada apa yang berlaku.

    Anda boleh melakukan ini:

    $queries = [
      "CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1",
      "UPDATE tmp SET id=100 WHERE id = 1",
      "INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100"
    ];
    
    foreach ($query as $query) {
      $stmt = $conn->prepare($query);
      $stmt->execute();
    }

    Jangan lupa untuk mendayakan pengecualian supaya sebarang kegagalan pertanyaan menghentikan proses anda dan bukannya membiarkan perkara menjadi tidak terkawal.

    Anda jangan gunakan multi_query的原因是该函数不支持占位符值。如果您需要在此查询中引入某种用户数据,则需要使用 bind_param untuk melakukan ini dengan selamat. Tanpa nilai pemegang tempat, anda terdedah kepada ralat suntikan SQL, salah satunya sudah cukup untuk menjadikan keseluruhan aplikasi anda terdedah.

    Perlu diambil perhatian bahawa jika anda melabur terlalu banyak dalam PDO daripada mysqli 更加灵活和适应性强,因此,如果您没有在 mysqli, maka ia patut dipertimbangkan untuk menukar. < /p>

    balas
    0
  • Batalbalas