cari

Rumah  >  Soal Jawab  >  teks badan

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

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粉502608799P粉502608799339 hari yang lalu451

membalas semua(1)saya akan balas

  • P粉373596828

    P粉3735968282024-02-04 14:00:15

    Seperti yang ditunjukkan oleh mesej ralat, anda menggunakan perpustakaan mysqli 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();

    balas
    0
  • Batalbalas