【问题标题】:PDO_SQLSRV returns all results as stringsPDO_SQLSRV 以字符串形式返回所有结果
【发布时间】:2012-11-03 03:59:28
【问题描述】:

对于 SQL Server 整数数据类型,似乎 PDO_SQLSRV 返回字符串,而 SQLSRV 返回整数。我已经编写的应用程序在几个地方进行了显式检查(===),因此这意味着 PDO_SQLSRV 不是 SQLSRV 的替代品。通常我不会考虑 PDO - 但是 Doctrine 似乎使用 PDO 并且我找不到它的 Microsoft SQLSRV 驱动程序(请启发我!)

这是带有响应的示例代码:

PDO

$sql = "SELECT Top 1 * FROM Users";
$stmt = $conn->query($sql);
$things = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($things);

数据:

'ID' => string '344' (length=3)
'UserName' => string 'admin                 ' (length=30)

SQLSRV

$sql = "SELECT Top 1 * FROM Users";
$things = sqlsrv_query($conn, $sql);

$thingsArray = [];
while( $row = sqlsrv_fetch_array($things, SQLSRV_FETCH_ASSOC))
{
    $thingsArray[] = $row;
}

var_dump($thingsArray);

数据:

'ID' => int 344
'UserName' => string 'admin                 ' (length=30)

所以 - 现在我认为我有两个选择:小心地发布它并确保我正在对整数进行类型转换或放松我的比较,或者编写/查找 Doctrine SQLSRV 库。

有没有人知道 PDO_SQLSRV 的设置会将整数作为整数返回?我检查了文档,但似乎找不到任何东西。

SQLSRV 也将日期作为原生 PHP DateTime 对象返回。有点酷,但并不重要。

【问题讨论】:

    标签: php sql-server pdo doctrine doctrine-orm


    【解决方案1】:

    PHP PDO 规范规定所有字段都作为字符串返回,因此 pdo_sqlsrv 只是遵守规范。

    【讨论】:

    • 这很有趣。在我的搜索中,我找到了与 MySQL 相关的 SO 的答案,并通过 PDO 返回整数。创建连接时设置了一个标志。不记得它的名字了 - 但试过了,但没有用。
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多