Rumah >pangkalan data >tutorial mysql >Mengapa Penyata `INSERT INTO` PDO Saya Tidak Berfungsi?

Mengapa Penyata `INSERT INTO` PDO Saya Tidak Berfungsi?

DDD
DDDasal
2025-01-13 07:01:42855semak imbas

Why Doesn't My PDO Prepared `INSERT INTO` Statement Work?

Menyelesaikan masalah PDO Disediakan Penyata untuk INSERT INTO dalam MySQL

Menggunakan pernyataan PDO yang disediakan untuk operasi MySQL INSERT INTO kadangkala boleh membawa kepada hasil yang tidak dijangka, seperti tiada data yang dimasukkan. Mari kita periksa punca biasa dan penyelesaiannya.

Pertimbangkan kod ini:

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
        VALUES('Bob','Desaunois','18')");

$statement->execute();</code>

Kod ini cuba memasukkan baris baharu ke dalam testtable, tetapi selalunya gagal mengisi pangkalan data.

Pautan Hilang: Pengikat Parameter

Masalahnya terletak pada ketiadaan pengikatan parameter. Walaupun kenyataan yang disediakan meningkatkan keselamatan terhadap suntikan SQL, ia memerlukan anda menggunakan ruang letak untuk nilai dan bukannya membenamkannya secara langsung dalam pertanyaan. Ini membolehkan pelaksanaan yang lebih selamat dan cekap, terutamanya apabila menjalankan pertanyaan yang sama dengan berbilang set data.

Penyelesaian: Parameter Dinamakan dan Kedudukan

Berikut ialah dua cara untuk melaksanakan pengikatan parameter dengan betul:

1. Parameter Dinamakan:

<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (:fname, :sname, :age)');

$statement->execute([
    ':fname' => 'Bob',
    ':sname' => 'Desaunois',
    ':age' => '18',
]);</code>

Ini menggunakan ruang letak bernama (:fname, :sname, :age) yang dipetakan kepada nilai dalam tatasusunan kaedah execute().

2. Parameter Kedudukan:

<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (?, ?, ?)');

$statement->execute(['Bob', 'Desaunois', '18']);</code>

Ini menggunakan tanda soal (?) sebagai ruang letak, dengan nilai sepadan yang disediakan dalam tatasusunan kaedah execute(). Pesanan adalah penting di sini.

Kedua-dua pendekatan mengikat parameter secara berkesan, menghalang suntikan SQL dan memastikan pemasukan data yang boleh dipercayai. Pilih kaedah yang paling sesuai dengan gaya pengekodan dan keperluan projek anda. Ingat untuk sentiasa membersihkan input pengguna sebelum menggunakannya dalam pertanyaan anda, walaupun dengan pernyataan yang disediakan, untuk mengekalkan keselamatan yang optimum.

Atas ialah kandungan terperinci Mengapa Penyata `INSERT INTO` PDO Saya Tidak Berfungsi?. 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