Mengembalikan Integer dan Angka sebagai Jenis dalam PHP daripada MySQL
Walaupun menetapkan PDO::ATTR_STRINGIFY_FETCHES kepada palsu, anda mungkin menghadapi masalah apabila lajur angka masih dikembalikan sebagai rentetan dan bukannya integer atau angka. Tingkah laku ini sering dikaitkan dengan isu pelaksanaan pemacu.
Perbezaan mysqlnd
Kunci untuk menyelesaikan isu ini terletak pada memastikan anda menggunakan mysqlnd pemandu untuk PHP. Apabila melihat php -i, ketiadaan "mysqlnd" dalam bahagian pdo_mysql menunjukkan bahawa pemacu asli sedang digunakan.
Memasang mysqlnd
Pada Ubuntu, pasang php5-mysqlnd bukannya php5-mysql. Untuk memastikan peralihan yang berjaya, ikuti langkah berikut:
Mengesahkan mysqlnd
Setelah memasang php5-mysqlnd, php -i kini harus menyebut secara jelas "mysqlnd" dalam bahagian pdo_mysql.
PDO Tetapan
Tetapkan atribut PDO berikut untuk memastikan pengendalian data yang betul:
Dikembalikan Nilai
Dengan pemacu dan tetapan yang betul, lajur angka akan dikembalikan sebagai jenis PHP yang sesuai:
Sebagai contoh, data berikut:
+-----------+-----------+----------+-------------+--------------+ | integer_col | double_col | float_col | decimal_col | bigint_col | +-----------+-----------+----------+-------------+--------------+ | 1 | 1.55 | 1.5 | 1.20 | 18446744073709551615 | +-----------+-----------+----------+-------------+--------------+
Akan dikembalikan sebagai:
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 Mengapakah hasil lajur angka MySQL PHP saya kadangkala rentetan dan bukannya integer atau terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!