Menyelesaikan Percanggahan dalam Mengembalikan Nilai Integer dan Numerik daripada MySQL dalam PHP
Apabila mendapatkan data daripada MySQL menggunakan PHP, ia boleh membingungkan untuk menghadapi ketidakkonsistenan jenis apabila lajur integer dan angka dikembalikan sebagai rentetan dan bukannya data yang dimaksudkan jenis.
Isu Pemandu
Adalah penting untuk menentukan pemacu asas yang digunakan untuk sambungan pangkalan data. Masalah selalunya berpunca daripada menggunakan pemacu MySQL asli, yang tidak mempunyai keupayaan untuk mengembalikan jenis angka sebagai integer.
Mengenal pasti Pemacu MySQLnd
Untuk memastikan sama ada anda menggunakan pemacu MySQL asli, periksa output php -i. Jika tiada sebutan "mysqlnd" terdapat dalam bahagian pdo_mysql, anda mungkin menggunakan pemacu asli.
Bertukar kepada Pemacu MySQLnd
Penyelesaian terletak pada bertukar kepada pemacu mysqlnd, yang menyokong pengembalian jenis angka dengan betul. Di Ubuntu, ini boleh dicapai dengan:
sudo apt-get remove php5-mysql sudo apt-get install php5-mysqlnd sudo service apache2 restart
Tetapan PDO
Setelah pemacu mysqlnd dipasang, pastikan tetapan PDO berikut ditetapkan dengan betul:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Dikembalikan Nilai
Selepas melaksanakan langkah di atas, hasil pertanyaan MySQL akan mengembalikan jenis angka seperti yang dijangkakan:
Contoh nilai yang dikembalikan ialah:
object(stdClass)[915] public 'integer_col' => int 1 public 'double_col' => float 1.55 public 'float_col' => float 1.5 public 'decimal_col' => string '1.20' (length=4) public 'bigint_col' => string '18446744073709551615' (length=20)
Atas ialah kandungan terperinci Mengapa Nilai Angka MySQL Saya Dikembalikan sebagai Rentetan dalam PHP, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!