2017-09-18 8 views
1

私は2つのテーブルとその2つの関連テーブルを持っています。私は、ターミナルからコードを実行している私の望む結果を与えるクエリを実行しようとしているが、PHPから実行された場合、ゼロまたは未知のカラム結果を返す。mysqliはphpのクエリで0を返しますが、端末で正しい結果を返します

これが私のクエリです:まさになどの上記のコードを実行する

$result = $mysqli->query("SELECT * FROM projects p 
JOIN projects_groups pg on p.projectid = pg.projectid 
JOIN groups g on g.groupid = pg.groupid 
WHERE p.projectid = 'bestproject'"); 

は私に0結果をバック与えます。私が変数 'bestproject'をスイッチすると、unkwownカラムのbestprojectエラーが戻されます。

私のクエリで何が問題になっていますか?

更新:私は混乱の原因となった結果を受け取っていた私の機能に愚かなエラーがありました。クエリが成功したときに受信側関数が空の配列を表示していて、クエリーを処理した関数がクエリーが間違っていた場合に空の結果または失敗した結果を表示していました(上記ではありません)。私は代わりに他の場所を見るためにクエリのエラーを探し続けました。あなたの時間を無駄にして申し訳ありません。

+0

もう少し詳しく説明してください。結果についてnum_rowsについて話していますか? – cvipul

+0

はい、num_rowは0ですが、不可能です。私はレコードをテストするために手動で作成しましたが、それは端末で動作します。 –

+1

実際に正しく戻っている可能性があります。 'num_rows'は完全に安全ではありません。 mysqli_num_rows()の振る舞いは、バッファされた結果セットとバッファなしの結果セットが使用されているかどうかによって異なります。バッファされていない結果セットの場合、結果のすべての行が取得されるまで、mysqli_num_rows()は正しい行数を返しません。 ' – aynber

答えて

0

ここで行ったことはすべて、どのテーブルとコンテンツが選択されているかです。あなたは同様にコンテンツを書き出すphp関数を持つ必要があります。

例:あなたはとても反響がテーブルの内容を書き出すん見ることができるように

$sql = "SELECT id, firstname, lastname FROM MyGuests"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 

。あなたはまた、ちょうど別の変数に保存[「ID」]あなたは$行を使用する必要はありませんすることができます:あなたがテーブルにいくつかのコンテンツを持っている必要があります。もちろん、

$sql = "SELECT id, firstname, lastname FROM MyGuests"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     $id = $row['id']; 
     $first = $row['firstname']; 
     $last = $row['last']; 

     echo "id: $id - Name: $first $last<br>"; 

    } 
} else { 
    echo "0 results"; 
} 

+0

ありがとうございました。私は、結果を処理する関数を持って、実際にはエラーが発生しました。私は、結果の代わりに空の変数を使用していた関数に結果を渡しました。それは愚かな間違いだった、私は正しくクエリを処理する関数を変更した後に更新されませんでした。 –

+0

結果を処理する関数を使用することは良いことです。そうでなければ、$ output = "あなたのコンテンツ"を行います:そしてecho $出力を行います。どこでそれをしたいですか? – Cordux

0

最初の問題は私には意味がありません。未知の列エラーは、一重引用符を使用しなかったために発生します。そのため、MySQLは値として扱う代わりに変数名を持つ列を検索しようとします。

$result = $mysqli->query("SELECT * FROM projects p 
JOIN projects_groups pg on p.projectid = pg.projectid 
JOIN groups g on g.groupid = pg.groupid 
WHERE p.projectid = '".$argument."'"); 

SQLインジェクションを避けるには、引数を渡すためにPDOを使用する方がよいでしょう。 http://php.net/manual/en/book.pdo.php

+2

Mysqliは準備されたステートメントも提供していますが、PDOを使用する* *はありません! – Qirel

+0

引数はアプリケーションによって生成されるので、ここでSQLインジェクションはできないと思います。 –

0

回答ありがとうございました。あなたは私に他の場所を見せる手助けをしました。

真実は私がどこかでミスをしたことです。私は配列に結果をロードしていましたが、1つの結果しか得られませんでしたが、それを受け取った関数が実際に別の変数からデータを取得しようとしていました...

ちょっと恥ずかしいですが、それを理解する時間があったので、私は尋ねなければならなかった。

申し訳ありません、ありがとうございます!

関連する問題