Giải pháp là đảm bảo rằng bạn đang sử dụng mysqlnd trình điều khiển cho php.
Làm cách nào để biết rằng bạn không sử dụng mysqlnd?
Khi xem php -i
, sẽ có không đề cập đến "mysqlnd". pdo_mysql
phần sẽ có một cái gì đó như thế này:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Bạn cài đặt nó như thế nào?
Hầu hết các hướng dẫn cài đặt cho L / A / M / P đều đề xuất apt-get install php5-mysql
nhưng trình điều khiển gốc cho MySQL được cài đặt bởi một gói khác:php5-mysqlnd
. Tôi thấy rằng điều này khả dụng với ppa:ondrej / php5-oldstable .
Để chuyển sang trình điều khiển mới (trên Ubuntu):
- Xóa trình điều khiển cũ:
apt-get remove php5-mysql
- Cài đặt trình điều khiển mới:
apt-get install php5-mysqlnd
- Khởi động lại apache2:
service apache2 restart
Làm cách nào để kiểm tra xem trình điều khiển đang được sử dụng?
Bây giờ php -i
sẽ đề cập rõ ràng đến "mysqlnd" trong pdo_mysql
phần:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Cài đặt PDO
Đảm bảo rằng PDO::ATTR_EMULATE_PREPARES
là false
(kiểm tra mặc định của bạn hoặc đặt nó):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Đảm bảo rằng PDO::ATTR_STRINGIFY_FETCHES
là false
(kiểm tra mặc định của bạn hoặc đặt nó):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Giá trị trả về
- Các loại dấu phẩy động (FLOAT, DOUBLE) được trả về dưới dạng các dấu phẩy động của PHP.
- Các loại số nguyên (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) được trả về dưới dạng số nguyên PHP.
- Các loại Điểm cố định (DECIMAL, NUMERIC) được trả về dưới dạng chuỗi.
† BIGINTs có giá trị lớn hơn 64 bit có dấu int (9223372036854775807) sẽ trả về dưới dạng chuỗi (hoặc 32 bit trên hệ thống 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)