0

sqlsrv_query()有効なステートメント リソースを返しますが、sqlsrv_fetch_array()その後 false を返します。MS SQL Server Management Studio でクエリ ( $q) をテストしたので、特定の行数の結果が返されることがわかりました。私が持っているコードは...

$r = @sqlsrv_query($dbcMssql, $q, array(), array('Scrollable'=>'static'));    // works
$rowCount = sqlsrv_num_rows($r);    // this shows there are correct number of rows
$row = sqlsrv_fetch_array($r, SQLSRV_FETCH_ASSOC);    // $row is FALSE

別の MSSQL データベースで同じコードを使用していますが、問題なく動作しています。この MSSQL DB との唯一の違いは、主キーに BIGINT を使用し、一部の列名が異なることです (これは重要ではありません)。

私は何を間違っていますか?

アップデート:

間違い$stmtではありませんが、とにかくエラーを見て、それは私に与えます

        [0] => IMSSP
        [SQLSTATE] => IMSSP
        [1] => -35
        [code] => -35
        [2] => Invalid type
        [message] => Invalid type

IMSSP の結果、 のドキュメントによると、http://php.net/manual/en/function.sqlsrv-errors.php私の SQL for PHP 2.0 ドライバーが問題の原因であると思われます。SQL for PHP 3.0 がリリースされたようです。これは私が推測する問題である可能性があります..クエリしようとしているDBは、以前に問題なく使用していたものよりも新しいバージョンのMSSQL(2008?対2005)であるためです。ただし、このドライバーは VC9 のみでコンパイルされており (2.0 は両方で利用可能でした)、私の PHP 5.3 は VC6 でコンパイルされているため、ロードされません。これは、ソース コードを使用して再コンパイルするか、PHP を VC9 バージョンで再インストールする必要があるということですか?

再コンパイルの方法がわからないので、PHP 5.3 の VC9 バージョンを再インストールするのが今の私の方法だと思います。

4

2 に答える 2

2

クエリに問題がある可能性があります。エラー メッセージはsqlsrv_errors()、たとえば次のように取得できます。

$stmt = sqlsrv_query($tsql);
if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}
于 2012-06-15T07:58:09.873 に答える
1

このエラー「無効な型」は、クエリが PDO が処理できない列の型を返す場合に発生します。たとえば、しようとするとこれが得られます

SELECT default_value FROM sys.parameters

その列は sql_variant 型であるためです。それが理にかなっている場合は、その列をvarcharなどにキャストするか、クエリから削除してください。

于 2014-04-01T09:22:55.643 に答える