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!