Rozwiązaniem jest upewnienie się, że używasz mysqlnd sterownik dla php.
Skąd wiesz, że nie używasz mysqlnd?
Podczas przeglądania php -i
, nie będzie nie wzmianka o "mysqlnd". pdo_mysql
sekcja będzie miała coś takiego:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Jak to zainstalować?
Większość instrukcji instalacji dla L/A/M/P sugeruje apt-get install php5-mysql
ale natywny sterownik dla MySQL jest instalowany przez inny pakiet:php5-mysqlnd
. Odkryłem, że jest to dostępne w ppa:ondrej/php5-oldstable .
Aby przełączyć się na nowy sterownik (w Ubuntu):
- Usuń stary sterownik:
apt-get remove php5-mysql
- Zainstaluj nowy sterownik:
apt-get install php5-mysqlnd
- Ponownie uruchom apache2:
service apache2 restart
Jak sprawdzić, czy sterownik jest używany?
Teraz php -i
wspomni o "mysqlnd" jawnie w pdo_mysql
sekcja:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Ustawienia PDO
Upewnij się, że PDO::ATTR_EMULATE_PREPARES
jest false
(sprawdź ustawienia domyślne lub ustaw je):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Upewnij się, że PDO::ATTR_STRINGIFY_FETCHES
jest false
(sprawdź ustawienia domyślne lub ustaw je):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Zwrócone wartości
- Typy zmiennoprzecinkowe (FLOAT, DOUBLE) są zwracane jako zmiennoprzecinkowe PHP.
- Typy całkowite (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) są zwracane jako liczby całkowite PHP.
- Typy o stałych punktach (DECIMAL, NUMERIC) są zwracane jako ciągi.
† BIGINTs o wartości większej niż 64 bity ze znakiem int (9223372036854775807) zwrócą jako ciąg (lub 32 bity w systemie 32-bitowym)
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)