1

PHP を使用して SQL データベースに対して非常に単純なクエリを作成しようとしていますが、何をしても適切な結果が得られないようです。以下は私が書いたコードです:

$loDate = '2013-10-01';
$hiDate = '2015-01-01';
$queryStr = "select TimeCol from dbo.SUBPUMP where TimeCol between " . $loDate . " and " . $hiDate;
$conn = sqlsrv_connect($serverName, $conInfo);
$result = sqlsrv_query($conn, $queryStr);

while ($row = sqlsrv_fetch_array($result)) {
    // This never prints.
    echo "row:<br>"; var_dump($row); echo "<br><br>";
}

echo "<br><br><br>";

// Prints "conInfo: resource(2) of type (SQL Server Connection)"
echo "conn: "; var_dump($conn); echo "<br><br>";

// Prints "result: resource(3) of type (SQL Server Statement)"
echo "result: "; var_dump($result); echo "<br><br>";

// Prints "row: NULL"
echo "row: "; var_dump($row); echo "<br><br>";

私が混乱しているのは、データベースへの適切な接続を確立する方法です。

$conn$resultはエラーを出力しませんが、実際にはデータを取得していないようです。

sqlsrv_connect()これまでのところ、VPN を介してデータベースからデータを取得しようとしているため、接続が希薄である可能性があるため、1 回受信するまでデータベースへの接続を何度も試行することが最善の推測です。良い接続。はsqlsrv_query()これを 1 回しか試行しないため、データの収集に失敗します。

ここで何がうまくいかないのかについて、他の誰かが何か考えを持っていますか?

4

5 に答える 5

2

日付列を参照しているため、接続オプション( http://msdn.microsoft.com/en-us/library/ff628167.aspx )で「ReturnDatesAsStrings」オプションを設定してみてください。

接続例:-

$connection['UID'] = $username;
$connection['PWD'] = $password;
$connection['Database'] = $database_name;
$connection['ReturnDatesAsStrings'] = true;
$connection['ConnectionPooling'] = false;
$connection['CharacterSet'] = 'UTF-8';

if (!empty($port)) {
  $hostname = $hostname.', '.$port;
}

$conn = sqlsrv_connect($hostname, $connection);

また、sql_query 関数 ( http://msdn.microsoft.com/en-us/library/hh487160.aspx )でカーソルの種類を "SQLSRV_CURSOR_STATIC" に設定してみてください。

サンプルクエリ:-

$result_id = sqlsrv_query($conn, $queryStr, null, array(
                'Scrollable' => SQLSRV_CURSOR_STATIC,
                'SendStreamParamsAtExec'=> true
            ));


while($row = sqlsrv_fetch_object($result_id)) {

}
于 2013-10-07T17:10:36.650 に答える
0

あなたの結果がnullに等しい場合でも、$resultはこれを返します

// Prints "result: resource(.) of type (SQL Server Statement)"
echo "result: "; var_dump($result); echo "<br><br>";

日付形式が原因で、クエリが null を返す場合があります。日付なしでこのクエリを試しましたか

$queryStr = "dbo.SUBPUMP から TimeCol を選択";

于 2013-10-07T14:49:17.033 に答える
0

これが長い間答えられていないことに少し驚いています。ここでの問題は非常に単純です: 日付は単一引用符で囲まれていません。

$loDate = '2013-10-01';
$hiDate = '2015-01-01';
$queryStr = "select TimeCol from dbo.SUBPUMP where TimeCol between '" . $loDate . "' and '" . $hiDate . "'";

SQL Server では、日付として解釈するために日付文字列を引用符で囲む必要があります。

また、準備済みステートメントを使用する必要があることに注意してください。これはより安全で、文字列を引用する必要はありません。

于 2016-07-21T19:08:41.703 に答える