Saya ingin cara untuk menunjukkan rupa pertanyaan SQL apabila parameter tanpa nama (
Ini adalah hanya untuk tujuan kebolehbacaan dan penyahpepijatan, dan tidak akan digunakan sebagai pertanyaan sebenar.
Saya dapati fungsi ini berfungsi dalam kebanyakan kes:
return array_reduce($this->bindValues, function ($sql, $binding) { return preg_replace('/?/', is_numeric($binding) ? $binding : '"' . $binding . '"', $sql, 1); }, $this->query);
Ganti? lwn nilai sebenar:
$data = array( 'item' => '1, 'type' => 'Adakah anda ok.' );KEMASKINI set `list` `item`=?,`type`= WHERE (`id` = ?) ; KEMASKINI set `senarai` `item`="1",`type`="Adakah anda ok." DI MANA (`id` = 1) ;Tetapi jika nilai mengandungi ?
$data = array( 'item' => '1, 'type' => 'Adakah anda ok?' );KEMASKINI `list` set `item`="1",`type`="Adakah anda ok2"Bagaimana saya boleh membuat ini supaya ia hanya mengikat? telah diganti.
Mula-mula, pertimbangkan untuk menggunakanparameter bernamadan bukannya ? 代码>. Dalam kes ini, anda tidak perlu menggantikan apa-apa: parameter yang dinamakan jelas dan agak mudah ditunjukkan dalam log, dan disokong oleh kebanyakan klien dbms untuk tujuan penyahpepijatan.
Jika parameter yang dinamakan tidak boleh dilaksanakan (kerana asas kod semasa yang besar atau sebarang sebab lain), anda mempunyai dua pendekatan utama:
Jika anda memilih cara yang kedua, berikut ialah contoh cara melakukannya dengan cepat dan kotor:
Ganti dalam pelbagai langkah:
?
替换为其他极不可能出现在参数或查询中的内容来准备参数。例如?
.?
,但不会匹配第一步中的替换。如果用?
替换,则为(?
?
替换为?
dalam keputusan.Nota:Hasil penggantian ini seharusnyatidakdigunakan sebagai pertanyaan dalam program. Penggantian ini berpotensi untuk melaksanakan mana-mana atau semua perkara berikut:
?
sebagai parameter (cth. dalam ulasan), hasilnya tidak tepat,?
), hasilnya tidak akan tepat.Keluaran:
Sunting:Untuk mencuba dan mengurangkan kesan tanda soal di dalam rentetan tetap dan nama yang dipetik, anda boleh cuba menggunakan pengganti ini: