Solusinya adalah memastikan bahwa Anda menggunakan mysqlnd driver untuk php.
Bagaimana Anda tahu bahwa Anda tidak menggunakan mysqlnd?
Saat melihat php -i
, tidak akan ada tidak penyebutan "mysqlnd". pdo_mysql
bagian akan memiliki sesuatu seperti ini:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Bagaimana cara menginstalnya?
Kebanyakan panduan instalasi untuk L/A/M/P menyarankan apt-get install php5-mysql
tetapi driver asli untuk MySQL diinstal oleh paket yang berbeda:php5-mysqlnd
. Saya menemukan bahwa ini tersedia dengan ppa:ondrej/php5-oldstable .
Untuk beralih ke driver baru (di Ubuntu):
- Hapus driver lama:
apt-get remove php5-mysql
- Instal driver baru:
apt-get install php5-mysqlnd
- Mulai ulang apache2:
service apache2 restart
Bagaimana cara memeriksa apakah driver sedang digunakan?
Sekarang php -i
akan menyebutkan "mysqlnd" secara eksplisit di pdo_mysql
bagian:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Setelan PDO
Pastikan PDO::ATTR_EMULATE_PREPARES
adalah false
(periksa default Anda atau setel):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Pastikan PDO::ATTR_STRINGIFY_FETCHES
adalah false
(periksa default Anda atau setel):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Nilai yang dikembalikan
- Tipe floating-point (FLOAT, DOUBLE) dikembalikan sebagai float PHP.
- Jenis bilangan bulat (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ) dikembalikan sebagai bilangan bulat PHP.
- Jenis Titik Tetap (DECIMAL, NUMERIC) dikembalikan sebagai string.
BIGINT dengan nilai lebih besar dari 64 bit yang ditandatangani (9223372036854775807) akan kembali sebagai string (atau 32 bit pada sistem 32 bit)
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)