PHP PDO Sqlsrv始终以字符串形式返回每个值

时间:2018-11-28 08:08:39

标签: php pdo

如何从具有正确字段类型的数据库中获取价值?

我正在使用PDO Sqlsrv从数据库获取数据,并且我总是以字符串形式接收数据,例如:customer_id : "1"我的customer_id字段类型是整数,应该是customer_id : 1但是{{1 }}字段类型为varchar,它以字符串形式返回正确的类型,例如:phone_number

编辑:

我正在使用PHP 5.5。我已经尝试过了。

phone_number : "12345678"

我得到了这个错误$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);

我的PDO代码:

Fatal error: Undefined class constant 'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE'

2 个答案:

答案 0 :(得分:2)

解决方案:

我将完全回答您的问题,您可以尝试使用PDOStatement::bindColumn。您使用PHP 5.5,并且基于support matrix,您的PHP驱动程序版本应为3.1或3.2。在此版本中,基于change log,不支持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>';
}
...

答案 1 :(得分:0)

您没有说您使用的是哪个版本的SQLSRV,但是在执行该指令时,它可能比4.0.8更旧:

[Added]
- SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute support.

我认为,没有一种简单的通用方法可以确定您的版本(phpinfo()的输出不会显示该版本),但是您可以升级到最新版本。

更新:尝试sqlsrv_client_info()