2017-11-10 5 views
-1

PHP関数を使用してmySQLデータベースを照会しようとしています。断続的に、私が使用している関数は結果を返すようではありません。限り、私は検出することができます、それはnull応答ではなく、関数に基づいて、それは無効な結果を返すようではありません(戻り値の文字列Nuthinこの場合)。私は時間のfetch_assoc mysqliが空に戻る

SELECT Name FROM Char_Name_full WHERE Male=1 AND DivisionID=12 ORDER BY RAND() LIMIT 1 

約80%と同じSQLクエリを使用してきた

function GeneratePiece2 ($sqlstr){ 
    $conn = new mysqli(gHOST, gUSER, gPASSWORD, gDATABASE); 
    // Check connection 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    } 
    $result = $conn->query($sqlstr); 
    $returnable = ""; 
    if ($result->num_rows > 0) { 
    while ($row = $result->fetch_assoc()) { 
     echo $row; 
     $returnable = $row; 
    } 
    } else { 
    return "nuthin"; 
    } 
    $conn->close(); 
    return $returnable; 
} 

私は{「名」:「クリストフ」} のようなものの結果を受け取ることになりますが、 10のうち1が何も返しません。

+0

どこ行がないことを確認してくださいNameの値がNULLです。 –

+0

私の知る限り、NULLの結果はありません。エコー結果以外を確認する別の方法がありますか? –

+0

実際に値を調べたり、$行の前後の文字をエコーし​​たりします。または、WHERE Name is NOT NULL AND ...(前の基準を追加する)のように、SQLでNULLを除外します。または、特定のNULLを検索する場合は、Char_Name_fullから名前を選択します。WHERE Nameは、そのクエリの行数が0より大きい場合はNULL、名前がNULLの場合はnullです。また、id列のような他の列を返すこともできます。 –

答えて

-1

クエリでは、行数が0より大きいかどうかを確認していますが、返される値がNULLかどうかを確認するために何も実行していません。あなたが記述している動作は、NULL値を持つ 'Name'の少なくとも1行のシナリオに一致します。

ここでコード構造や構文についてはコメントしませんが、ここではnull値が問題であることを特定/証明するのに役立つように応答値を変更しました。

また、クエリが1行に限定されている場合、whileループは1回だけ反復されます。

if ($result->num_rows > 0) { 
    while ($row = $result->fetch_assoc()) { 
     // Echo out the values for Name in the result set 
     if(is_null($row["Name"],)) 
      echo '[NULL]'; 
     else 
      echo $row["Name"]; 

     // your application logic ;) 
     $returnable = $row; 
    } 
} else { 
    return "no rows"; 
} 

側に沿ってToad for MySQLあなたの開発のようなSQL IDEを使用することを検討してください、あなたは視覚的にコードハックを記述することなく、これらの問題のために、あなたのデータを調べることができます:)

+0

OP、このコードを使用しないでください、膨大で助けにならない –

+0

これはあまり公平ではありません;)私はOPのコードに3行を追加して、それらを把握するのに役立ちます...コメントとして –

+0

while文でその人をよく調べて、あなたの状態が意味をなさないかどうかを確認してください。 –

関連する問題