php - PHP PDO Sqlsrv always return every values as string
问题描述
How do I get value from DB with correct field type?
I'm using PDO Sqlsrv to fetch data from DB and I always receive data as string like: customer_id : "1"
My customer_id
field type is integer it should be customer_id : 1
But phone_number
field type is varchar it return to correct type as string like: phone_number : "12345678"
EDIT:
I'm using PHP 5.5. I've tried this.
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);
And I got this error Fatal error: Undefined class constant 'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE'
My PDO code :
$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);
解决方案
Solution:
I will answer exactly to your question and what you may try is to use PDOStatement::bindColumn. You use PHP 5.5 and based on support matrix, your PHP Driver version should be 3.1 or 3.2. In this version, based on change log, SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
is not supported.
...
$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>';
}
...
推荐阅读
- java - 交换数组中的值以使顺序从最小到最大
- wcf - 如何使用代理访问 .net core 中的 wcf 服务
- html - 如何在每个元素周围放置边框?
- python - 尝试使用“import re”来匹配 txt 文件中区分大小写的密码,但它不起作用
- javascript - 如何创建可滚动的卡片行,如 DuckDuckGo/Google 搜索实现的卡片?
- scala - 将两个可选列提取到 Slick 中的案例类中
- c - 打印一个函数返回的字符串。我这里有两种情况,一种返回指向字符串的指针,另一种返回 char 数组
- c++ - 一个消除元音编译错误的函数
- c++ - 用 std::conditional 继承
- java - 使用带有 PKCS11 库的 Bouncy Castle 生成签名的 CSR