Menghadapi masalah padanan baris dalam pangkalan data.
P粉005105443
2023-07-25 10:47:08
<p>Saya ingin mendapatkan kiraan baris untuk menyemak sama ada e-mel yang sama sudah wujud dalam pangkalan data. Saya mencuba beberapa kaedah tetapi tidak berjaya. Apabila saya menjalankan pertanyaan secara langsung dalam pangkalan data ia mengembalikan saya bilangan baris, tetapi melalui kaedah pelaksanaan PDO ia mengembalikan 0. </p>
<p>Saya cuba mengira secara manual menggunakan kaedah fetchAll dan juga menggunakan kaedah rowCount tetapi tidak berjaya. </p>
<pre class="brush:php;toolbar:false;">$sql = 'PILIH kiraan(*) DARI peti masuk DI MANA uid = DAN from_email = ?';
$result = $link->prepare($sql);
$result->execute([$email_number,$email_f]);
$number_of_rows = $result->fetchColumn();</pre>
<p>Masalahnya terletak pada pembolehubah $email_f, yang mengandungi kod HTML. </p>
<pre class="brush:php;toolbar:false;">SELECT count(*) FROM inbox WHERE uid = "6961"
DAN from_email = "Tawaran abc <abc@abcs.com>"</pre>
<p>Ini adalah pernyataan pertanyaan yang saya cetak daripada $sql, apabila saya melaksanakannya secara langsung dalam phpMyAdmin ia berfungsi dengan baik dan mengembalikan kiraan 3 baris, tetapi melalui kaedah pelaksanaan ia mengembalikan 0. </p>
Pertama sekali, anda perlu menerima hakikat bahawa jika pertanyaan anda tidak menemui sebarang baris, bermakna tiada padanan, walaupun anda boleh bersumpah bahawa data itu betul. Apabila pertanyaan tidak mengembalikan baris, tiada baris yang sepadan dengan kriteria. Oleh itu, anda perlu mengetahui sebabnya. Tetapi pertama sekali, anda perlu memastikan pertanyaan anda betul:
Masalah yang disebabkan oleh ralat SQL
Pertama, anda perlu memastikan sebenarnya tiada ralat dalam pertanyaan, kerana "tiada keputusan" mungkin bermakna terdapat ralat dalam pertanyaan itu. Sila rujuk jawapan berikut untuk butiran: pdo dan mysqli.
Masalah yang disebabkan oleh keadaan
Periksa keadaan anda. Terdapat beberapa syarat yang saling eksklusif, seperti WHERE col=1 DAN col=2. Ia tidak pernah mengembalikan sebarang baris. Cuba permudahkan syarat sehingga ia mula mengembalikan beberapa baris, kemudian tapis syarat untuk mendapatkan hasil yang anda inginkan.
Tetapi okey, tiada ralat, syaratnya betul dan anda boleh bersumpah ada data dalam jadual yang sepadan dengan pertanyaan anda. Walau bagaimanapun, masih terdapat beberapa perangkap:
Masalah yang disebabkan oleh data
Pertama, apabila pembolehubah terlibat, pastikan pembolehubah itu wujud dan sebenarnya mengandungi beberapa nilai.
Kemudian semak nilai itu sendiri. Mungkin terdapat beberapa aksara yang ditukar atau tidak boleh dicetak dalam data input (atau pangkalan data). Sebagai contoh, pemisah baris atau simbol yang dikodkan khas, atau aksara tertentu seperti < dan > Akibatnya, pertanyaan untuk teks yang mengandungi <abc@abcs.com> tidak akan sepadan dengan teks <abc@abcs.com>. Anda boleh melakukan semakan pantas menggunakan fungsi rawurlencode(), yang akan menukar semua aksara bukan Latin kepada kod, menjadikannya kelihatan.
Masalahnya ialah ini hanyalah tekaan dan tiada siapa yang boleh memberitahu anda apa masalah sebenar kerana ia adalah pangkalan data anda, data input anda dan hanya anda yang boleh menemui masalahnya.
Saya menulis artikel yang menerangkan cara menyahpepijat isu PDO anda.Untuk nyahpepijat isu khusus anda perlukan:
Masalah yang disebabkan oleh kelayakan sambungan
Satu lagi masalah biasa ialah apabila anda mempunyai berbilang pangkalan data dan menyambung ke pangkalan data yang salah, yang tidak mempunyai data yang diminta. Soalan ini serupa dengan soalan sebelumnya, jadi ikuti langkah yang sama, kecuali anda menyemak baris data daripada menyemak senarai jadual.
Masalah yang disebabkan oleh set aksara/pengekodan
Ini adalah kes yang jarang berlaku tetapi hanya untuk memastikan, ikuti ini Jawapan yang bagus