0

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)

だから - 今、私には2つの選択肢があると思います.これを慎重にリリースし、整数を型キャストするか、比較を緩めていることを確認するか、Doctrine SQLSRVライブラリを作成/検索します.

整数を整数として返す PDO_SQLSRV の設定を知っている人はいますか? ドキュメントを確認しましたが、何も見つからないようです。

また、SQLSRV は日付をネイティブ PHP DateTime オブジェクトとして返します。ちょっとクールですが、重要ではありません。

4

1 に答える 1

1

PHP PDO 仕様では、すべてのフィールドが文字列として返されると規定されているため、pdo_sqlsrv は仕様に従っているだけです。

于 2012-11-03T04:27:26.213 に答える