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サーバーを関数の外でしか動作させることができません。提案をいただければ幸いです
乾杯