对于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对象返回。有点酷,但不重要。
答案 0 :(得分:1)
PHP PDO规范声明所有字段都以字符串形式返回,因此pdo_sqlsrv只是遵守规范。