Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah PDO Mengembalikan Nilai MySQL Berangka sebagai Rentetan, dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah PDO Mengembalikan Nilai MySQL Berangka sebagai Rentetan, dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2024-12-11 11:51:11130semak imbas

Why Does PDO Return Numeric MySQL Values as Strings, and How Can I Fix It?

Jenis Numerik dalam MySQL dengan PDO: Mengelakkan Rentetan

Selalunya apabila bekerja dengan pangkalan data, kami menghadapi isu mendapatkan semula nilai angka sebagai rentetan dan bukannya jenis data angka yang dijangkakan . Ini boleh menjadi kejadian biasa apabila menggunakan PDO (Objek Data PHP) dengan MySQL.

PDO menawarkan atribut yang dipanggil PDO::ATTR_STRINGIFY_FETCHES yang direka untuk mengendalikan penukaran ini, tetapi ia tidak berkenaan dengan pemacu MySQL. Ini membuatkan kita tertanya-tanya mengapa PDO mengembalikan rentetan untuk nilai angka dalam MySQL.

Jawapannya terletak pada tetapan emulasi PDO. Secara lalai, PDO meniru pernyataan yang disediakan untuk keserasian dengan pemacu yang lebih lama. Walau bagaimanapun, emulasi ini boleh menyebabkan nilai berangka dikembalikan sebagai rentetan.

Untuk mengelakkan ini, kita perlu melumpuhkan emulasi dengan menetapkan PDO::ATTR_EMULATE_PREPARES kepada false:

$pdo = new PDO($dsn, $user, $pass, [
    PDO::ATTR_EMULATE_PREPARES => false
]);

Dengan emulasi dilumpuhkan, MySQL akan mengembalikan jenis data asli untuk pernyataan yang disediakan, memastikan bahawa nilai berangka diambil sebagai data berangka tanpa sebarang penukaran rentetan.

Adalah penting untuk ambil perhatian bahawa secara amnya adalah amalan yang baik untuk menggunakan pernyataan yang disediakan semasa bekerja dengan pangkalan data untuk menghalang kelemahan suntikan SQL dan meningkatkan prestasi.

Atas ialah kandungan terperinci Mengapakah PDO Mengembalikan Nilai MySQL Berangka sebagai Rentetan, dan Bagaimana Saya Boleh Membetulkannya?. 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