Rumah > pangkalan data > tutorial mysql > Mengapakah hasil lajur angka MySQL PHP saya kadangkala rentetan dan bukannya integer atau terapung?

Mengapakah hasil lajur angka MySQL PHP saya kadangkala rentetan dan bukannya integer atau terapung?

DDD
Lepaskan: 2024-12-10 16:18:10
asal
906 orang telah melayarinya

Why are my PHP MySQL numeric column results sometimes strings instead of integers or floats?

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:

  1. Alih keluar pemacu lama: apt-get remove php5-mysql
  2. Pasang pemacu baharu: apt-get install php5-mysqlnd
  3. Mulakan semula Apache: perkhidmatan apache2 mulakan semula

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:

  • PDO::ATTR_EMULATE_PREPARES: false
  • PDO::ATTR_STRINGIFY_FETCHES: false

Dikembalikan Nilai

Dengan pemacu dan tetapan yang betul, lajur angka akan dikembalikan sebagai jenis PHP yang sesuai:

  • Jenis titik terapung (Apung, BERGANDA): PHP terapung
  • Jenis integer (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT): PHP integer
  • Jenis Titik Tetap (PERPULUHAN, ANGKA): rentetan
    (Nota: BIGINT yang melebihi int bertandatangan 64-bit akan kembali sebagai rentetan pada sistem 64-bit.)

Sebagai contoh, data berikut:

+-----------+-----------+----------+-------------+--------------+
| integer_col | double_col | float_col | decimal_col | bigint_col    |
+-----------+-----------+----------+-------------+--------------+
| 1          | 1.55      | 1.5      | 1.20        | 18446744073709551615 |
+-----------+-----------+----------+-------------+--------------+
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan