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
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:
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.