2011-08-11 20 views
3

SQL Serverデータベースのクエリを実行しようとしましたが、多対多の関係があります。私は関係テーブルとの行を必要とするテーブルをリンクし、一意のID、この場合は$ guidを接続します。sqlsrv_num_rowsを持つPHP

クエリは機能することがあります。それはうまくいくでしょうし、別のテーブルの$ guidだけを切り替えると、テーブルを見つめていても新しい$ guidに関連付けられた値があっても失敗します。

<?php 
$guid = '{893C7BF8-E8C5-41D5-9C61-A72CF62DDBA8}'; 

// Connect to Database 
$server = "#@#($#";  
$connectionSettings = array("Database"=>"db", "UID"=>"user", "PWD"=>"pword"); 
$connection = sqlsrv_connect($server, $connectionSettings); 

if (!$connection){ 
    die("Failed Connection"); 
} 

// Prepare and Execute Query 
$sql = "SELECT * 
     FROM STREAMS.ATTACHMENTS a INNER JOIN STREAMS.RELATTACHMENTS ra 
     ON a.ROWGUID = ra.ATTACHMENT_GUID 
     WHERE ra.FEATURE_GUID = '" . $guid . "'"; 

$results = sqlsrv_query($connection, $sql); 
$rowCount = sqlsrv_num_rows($results); 

if ($rowCount === false) 
    echo "failure"; 
else 
    echo $rowCount; 

while($row = sqlsrv_fetch_array($results)){ 
    echo "loop"; 
} 
?> 

でも見知らぬ人、このコードへの出力は以下の通りです:

failurelooploop 

だからsqlsrv_num_rowsコマンドが結果に行がカウントされないことを意味...しかし、それはまた、同じ結果を意味しますwhileループは2回周りしたので、setには2行あります。

誰かがこのファンキーな行動を説明できますか?

ありがとうございました。

答えて

3

何か問題が起きた場合は、sqlsrv_num_rowsFALSEを返します。私は原因があなたの​​列に関係していると思います

// probably don't want this in production. 
print_r(sqlsrv_errors()); 

が、私は確認することはできません:あなたはを通してエラー出力を得ることができます。 :-)

ああ、行数が必要な場合を除き、使用しないでください。代わりにdo... whileを使用してください:

$row = sqlsrv_fetch_array($results); 
if($row) 
{ 
    do{ 
     echo "loop"; 
    } while($row = sqlsrv_fetch_array($results)); 
} 
else 
{ 
    // No results found 
    // you can output print_r(sqlsrv_errors()); here 
} 
+0

配列([0] =>配列([0] => IMSSP [SQLSTATE IMSSP [1] => -50 [code] => -50 [2] =>この関数は、静的またはキーセットのスクロール可能なカーソルを持つ文でのみ機能します。静的またはキーセットのスクロール可能カーソル)。)1looploop。 ///それは実際のGUIDのためのものです...今は動作していないGUIDのために私はまったく同じエラーメッセージを返しますが、最後にはループプループはありません...これは両方の配列に0要素があることを示唆していますか?データベースには、そのクエリの結果があります。私は本当にエラーを理解していない。 – duncanrager

+0

それで、sqlsrv_num_rowsでエラーが発生したのは、デフォルトのフォワードカーソルを使用していたためですが、これは問題ありませんが、他の動作、SQLクエリーは一部のGUIDのみで動作しているとは言えませんその他... GUID列に何が間違っている可能性がありますか? – duncanrager

+0

検索の12時間後...私のsqlsrv_num_rowsを取り除くように私に言っているこのポストのために、私は最終的に私のログインスクリプトを動作させることができました。私は一日中このコードをデバッグするだけで、この投稿を見つけ出して努力しています! YIPEEEE ... – MizAkita

0

このエラーは、カーソル・タイプSQLSRV_CURSOR_FORWARD & SQLSRV_CURSOR_DYNAMICのために示しています。私の個人的な好みはそれを使用しないことです。あなたはまだ使用したい場合は、それは次のように機能を照会するために追加のパラメータを渡す:

$stmt = sqlsrv_query($connection, $sql, array(), array("Scrollable" => 'keyset')); 
// $stmt = sqlsrv_query($connection, $sql, array(), array("Scrollable" => 'dynamic')); 
// $stmt = sqlsrv_query($connection, $sql, array(), array("Scrollable" => 'static')); 

チェックより:https://msdn.microsoft.com/en-us/library/hh487160.aspx - http://php.net/manual/en/function.sqlsrv-query.php

関連する問題