Bagaimanakah cara saya mengembalikan lajur integer dan angka daripada MySQL sebagai integer dan angka dalam PHP?
Apabila bekerja dengan pangkalan data MySQL dalam PHP, memastikan bahawa lajur integer dan berangka diambil dan diwakili dengan betul adalah penting. Sambungan PDO dalam PHP menyediakan cara untuk melakukan ini, tetapi ia boleh menjadi masalah jika pemacu asli MySQL tidak digunakan.
Mengapa lajur integer dikembalikan sebagai rentetan
Pemandu asli MySQL tidak mempunyai sokongan untuk mengembalikan nilai angka sebagai integer dan angka. Ini bermakna, secara lalai, semua lajur diambil semula sebagai rentetan. Walaupun dengan bendera PDO PDO::ATTR_STRINGIFY_FETCHES ditetapkan kepada palsu, tingkah laku pemandu tidak berubah.
Cara membetulkannya
Penyelesaiannya ialah bertukar kepada mysqlnd pemandu untuk PHP. Pemacu ini menyokong mengembalikan nilai integer dan angka dalam jenis PHP aslinya.
Pemasangan
Untuk memasang pemacu mysqlnd pada Ubuntu, anda boleh menggunakan langkah berikut:
Pengesahan
Untuk mengesahkan bahawa pemacu mysqlnd adalah sedang digunakan, jalankan php -i. Outputnya kini harus memasukkan "mysqlnd" dalam bahagian pdo_mysql.
Tetapan PDO
Pastikan tetapan PDO berikut ditetapkan dengan betul:
Nilai yang dikembalikan
Dengan pemacu mysqlnd, jenis pulangan berikut digunakan:
Contoh
Selepas bertukar kepada pemacu mysqlnd, anda akan dapat mendapatkan semula nilai integer dan angka dengan betul:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $result = $pdo->query('SELECT * FROM table'); $row = $result->fetch(PDO::FETCH_OBJ); echo $row->integer_col; // 1 (int) echo $row->double_col; // 1.55 (float) echo $row->decimal_col; // '1.20' (string) echo $row->bigint_col; // '18446744073709551615' (string)
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Lajur Integer dan Numerik sebagai Jenis Aslinya daripada MySQL dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!