Cabaran masalah pemadanan baris pangkalan data
P粉078945182
P粉078945182 2023-08-13 16:46:45
0
1
496
<p>Saya ingin mendapatkan kiraan baris untuk menyemak sama ada e-mel yang sama sudah wujud dalam pangkalan data. Saya mencuba beberapa mekanisme tetapi tidak berjaya. Apabila saya menjalankan pertanyaan secara langsung dalam pangkalan data ia mengembalikan saya bilangan baris, tetapi jalankan melalui PDO mengembalikan saya 0. </p> <p>Saya telah menggunakan kaedah fetchAll untuk mengira secara manual, malah menggunakan kaedah rowCount, tetapi tidak berjaya sama ada. </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 ialah dengan $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 saya 3 baris, tetapi melalui pelaksanaan ia mengembalikan saya 0. </p>
P粉078945182
P粉078945182

membalas semua(1)
P粉826429907

Pertama, anda perlu menerima hakikat bahawa jika pertanyaan anda tidak menemui sebarang baris, itu bermakna tiada padanan, walaupun anda boleh bersumpah data itu betul. Apabila pertanyaan tidak mengembalikan baris, tiada baris yang sepadan dengan kriteria. Jadi anda perlu mengetahui sebabnya. Tetapi pertama-tama anda perlu memastikan pertanyaan anda betul:

Masalah yang disebabkan oleh ralat SQL

Mula-mula anda perlu memastikan pertanyaan anda sebenarnya tiada ralat, kerana "tiada hasil" mungkin bermakna terdapat ralat dalam pertanyaan. Untuk butiran, sila rujuk jawapan ini: pdo dan mysqli.

Masalah yang disebabkan oleh keadaan

Periksa keadaan anda. Terdapat beberapa syarat yang saling eksklusif, seperti WHERE col=1 AND 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 ia 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). Contohnya pemisah baris atau simbol yang dikodkan khas, atau beberapa aksara seperti fungsi <>转换为HTML实体。结果是,查询包含<abc@abcs.com>将永远不会匹配文本<abc@abcs.com>。为了快速检查,你可以使用rawurlencode(), yang menukar semua aksara bukan Latin kepada kod, dengan itu menjadikannya kelihatan.

Masalahnya, ini hanya tekaan, tiada siapa yang boleh memberitahu anda apa masalah sebenar, kerana ia adalah pangkalan data anda, data input anda, dan hanya anda yang dapat mencari masalah tersebut.

Saya menulis artikel yang menerangkan cara menyahpepijat isu PDO anda.

Untuk nyahpepijat isu khusus anda perlukan:

  • Pastikan kedua-dua PDO dan PHP mendayakan pelaporan ralat penuh. Ini sangat membantu dan boleh menunjukkan kepada anda kesilapan taip, kesilapan ejaan, dsb.
  • Semak semula data dan input dalam pangkalan data untuk mencari percanggahan. Fungsi urlencode() akan membantu, ia akan memaparkan semua aksara yang tidak boleh dicetak dan ditukar dalam pangkalan data dan input.

Masalah yang disebabkan oleh kelayakan sambungan

Satu lagi masalah biasa ialah apabila anda mempunyai beberapa pangkalan data dan menyambung ke pangkalan data yang salah, ia tidak mempunyai data yang diminta. Soalan ini serupa dengan soalan ini, jadi ikuti langkah yang sama untuk menyemak, kecuali daripada menyemak senarai jadual, anda mempunyai baris data.

Masalah yang disebabkan oleh set aksara/pengekodan

Ini adalah kes yang jarang berlaku, tetapi hanya untuk memastikan, semak dengan mengikuti senarai semak Jawapan Hebat ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan