Mengambil semula Jenis Angka daripada MySQL dengan PDO
Masalah:
Apabila mendapatkan data daripada Pangkalan data MySQL menggunakan PDO, nilai integer dikembalikan sebagai rentetan dan bukannya jenis angka mereka, walaupun apabila PDO atribut kelas PDO::ATTR_STRINGIFY_FETCHES ditetapkan kepada palsu.
Jawapan:
Memahami Isu Jenis Angka:
Ia perkara biasa untuk pangkalan data mengembalikan nilai berangka sebagai rentetan. Ini kerana sesetengah pemacu pangkalan data, seperti pemacu lalai MySQL, menganggap semua nilai sebagai rentetan.
Mencegah Stringifikasi:
Untuk mengelakkan nilai daripada dikembalikan sebagai rentetan, Pemacu Asli MySQL (mysqlnd) mesti digunakan. Pemacu ini menyokong mendapatkan semula jenis data asli, termasuk jenis angka.
Mengkonfigurasi mysqlnd:
Untuk menggunakan mysqlnd, tetapan berikut mesti ditambahkan pada tatasusunan pilihan sambungan PDO:
array( PDO::ATTR_EMULATE_PREPARES => false )
Contoh Kod:
$dsn = 'mysql:host=localhost;dbname=my_db'; $user = 'root'; $pass = 'password'; $pdo = new PDO($dsn, $user, $pass, array( PDO::ATTR_EMULATE_PREPARES => false ));
Dengan menetapkan PDO::ATTR_EMULATE_PREPARES kepada palsu, emulasi pernyataan yang disediakan akan dimatikan, membolehkan mysqlnd mendapatkan semula nilai angka sebagai jenis data yang betul.
Atas ialah kandungan terperinci Mengapakah integer MySQL dikembalikan sebagai rentetan dalam PDO, dan bagaimana saya boleh mendapatkannya sebagai nombor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!