Uncaught ValueError: mysqli_stmt::execute(): Parameter #1 ($params) mestilah susunan senarai
P粉502608799
P粉502608799 2024-02-03 17:09:57
0
1
422

Saya cuba memasukkan berbilang nilai dalam pangkalan data saya dengan pernyataan yang disediakan melalui dua pertanyaan ini, kedua-dua pertanyaan gagal dan mengembalikan salah satu daripadanya

Ralat Tidak Ditangkap: Panggilan ke kaedah yang tidak ditentukan mysqli_stmt::bindValue()

Kod pertama atau

Uncaught ValueError: mysqli_stmt::execute(): Parameter #1 ($params) Mestilah susunan senarai

Yang kedua. Apabila saya menaip list 而不是 array tertera

Kesilapan tatabahasa

NotaSemua pembolehubah, nama jadual dan lajur adalah variasi yang dipermudahkan

Saya telah melihat banyak soalan yang serupa tetapi tiada satu pun menjawab soalan saya. Tidak juga yang "ulang" ini.

Adakah sesiapa mempunyai penyelesaian, atau alternatif?

Berikut ialah dua kod:

if(isset($_POST['ID'], $_POST['atr1'])){

        $sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (':fir', ':sec')");
        
        $sql -> bindValue(':fir', $_POST['ID'],);
        $sql -> bindValue(':sec', $_POST['atr1'],);
        $sql -> execute();
}
$sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (:fir, :sec)");
$sql -> execute(array(
    ':fir' => $_POST['ID'],
    ':sec' => $_POST['atr1'],
));

P粉502608799
P粉502608799

membalas semua(1)
P粉373596828

Seperti yang ditunjukkan oleh mesej ralat, anda menggunakan perpustakaan mysqli a> untuk berkomunikasi dengan pangkalan data anda. Walau bagaimanapun, kod anda nampaknya berdasarkan contoh menggunakan PDO , iaitu perpustakaan yang berbeza sama sekali. Walaupun sesetengah fungsi mempunyai nama yang hampir sama, ia sebenarnya mempunyai API dan keperluan yang berbeza.

Sebagai contoh, beberapa perbezaan API ialah:

  • mysqli tidak menyokong parameter bernama, hanya pemegang tempat tanpa nama yang ditentukan menggunakan ?
  • PDO mempunyai fungsi bindParam dan bindValue, manakala mysqli mempunyai bind_param
  • Sebelum PHP 8.1, mysqli tidak menerima senarai parameter yang diberikan secara langsung melalui fungsi execute().

Kod ini harus digunakan dengan mysqli:

Jika anda mempunyai PHP 8.1 atau lebih tinggi:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->execute([$_POST['ID'], $_POST['atr1']]);

Jika tidak:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->bind_param("ss", $_POST['ID'], $_POST['atr1']);
$sql->execute();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan