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

Mengapa Penyata `INSERT INTO` PDO Saya Tidak Berfungsi?

DDD
Lepaskan: 2025-01-13 07:01:42
asal
899 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan