2

PHP 5.4.14 SQL Server 2012/SQL クライアント 2012 Windows 2008 R2

SQLクエリを実行するために呼び出す関数(簡略版が続きます)があります。それは正しく動作します: DB に接続します。クエリを実行し、有効なリソースを取得します。問題は、返されるリソースが null であることです...

function squeal($query) {

    $serverName     = "XXXXXXXX\SQLEXPRESS";
    $uid            = "private";
    $pwd            = "private";
    $connectionInfo = array( "UID"=>$uid, "PWD"=>$pwd, "Database"=>"DBname");

    /* Connect using SQL Server Authentication. */
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if( $conn === false ) {
         echo "Unable to connect.</br>";
         die( print_r(sqlsrv_errors(), true));
    }
    /* Run query */
    $result = sqlsrv_query( $conn, $query, array(), array("Scrollable"=>"buffered"));
    if( $result === false ) {
         echo "Error in executing query.</br>";
         die( print_r(sqlsrv_errors(), true));
    }
    /* check resource exists for debug (still fails without these lines) */
    echo("Resource=".intval($result)."</br>");
    echo("Has rows=".sqlsrv_has_rows($result)."</br>");

    return $result;
}

$tsql = "SELECT id FROM mytable";
$fred = squeal($tsql);

echo("Resource=".intval($fred)."</br>");
echo("Has rows=".sqlsrv_has_rows($fred)."</br>");

次の出力が得られます...

Resource=8
Has rows=1
Resource=8

Warning: sqlsrv_has_rows(): 8 is not a valid ss_sqlsrv_stmt resource in <path> on line 85
Has rows=

SQL は正しく機能しており、有効なリソースを返します。関数から戻ると、リソース #8 (この例では) が渡されたことを認識しますが、それは空です。完全に機能するMySQLにも同様の方法を使用します。私のイントラネット アプリ全体は、関数を呼び出してクエリを実行し、リソースを取得できることに依存しています。

sqlsvr/ODBC で関数を終了すると、リソースは「停止」しますか? 確かにそうではありません。

私は答えを求めてグーグルを精査するのに数日を費やしましたが、SQLサーバーを関数の外でしか動作させることができません。提案をいただければ幸いです

乾杯

4

1 に答える 1