PHP PDO Sqlsrv всегда возвращает все значения в виде строки - PullRequest
0 голосов
/ 28 ноября 2018

Как получить значение из БД с правильным типом поля?

Я использую PDO Sqlsrv для извлечения данных из БД, и я всегда получаю данные в виде строк, таких как: customer_id : "1" Мой customer_id тип поляцелое число должно быть customer_id : 1 Но phone_number тип поля varchar, он возвращает правильный тип в виде строки, например: phone_number : "12345678"

РЕДАКТИРОВАТЬ:

I 'м с использованием PHP 5.5.Я пробовал это.

$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);

И я получил эту ошибку Fatal error: Undefined class constant 'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE'

Мой код PDO:

$this->dbh = new PDO('sqlsrv:Server=' . $_ENV['DB_HOST'] . ';Database=' . $_ENV['DB_NAME'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$this->dbh->exec('set names ' . $_ENV['DB_CHAR_SET']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); // Got Error 
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Решение:

Я точно отвечу на ваш вопрос, и вы можете попробовать использовать PDOStatement :: bindColumn .Вы используете PHP 5.5 и используете матрицу поддержки , ваша версия драйвера PHP должна быть 3.1 или 3.2.В этой версии на основе журнала изменений SQLSRV_ATTR_FETCHES_NUMERIC_TYPE не поддерживается.

...
$stmt->bindColumn('customer_id', $customer_id, PDO::PARAM_INT);
$stmt->bindColumn('phone_number', $phone_number, PDO::PARAM_STR);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    var_dump($customer_id);
    var_dump($phone_number);
    echo '<br>';
}
...
0 голосов
/ 28 ноября 2018

Вы не говорите, какую версию SQLSRV вы используете, но есть вероятность, что она старше 4.0.8 , когда директива была реализована:

[Added]
- SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute support.

Я не думаю, что есть простой общий способ определить, какая у вас версия (вывод phpinfo() не отображает ее), но вы можете просто обновить ее до последней версии.

Обновить: попробовать sqlsrv_client_info().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...