2012-01-24 13 views
1

私は数日間この問題に苦しんでおり、進歩を遂げることはできません... 私のデータベースからただ一つの結果を得ようとしていますが、 (Android Mysql - あまりにも多くの結果

PHP:mは、テーブル全体なっ

{ 
    $connect = @mysqli_connect ($host, $username, $pass, $dbname) 
    OR die ('Could not connect to MySQL'); 

    $table = $_REQUEST['table']; 
    $key = $_REQUEST['id']; 
    $key_value = $_REQUEST['id_value']; 

    $q = "SELECT * FROM ".$table." where ".$key."='".$key_value."'"; 
    $r = @mysqli_query ($connect, $q); 

    while ($row = mysqli_fetch_array($r)) 
     $output[]=$row; 
    print(json_encode($output)); 
} 

私は、データがうまく受信されているので、そのためにあなたに私のアンドロイドコードを表示する必要はありませんと思います(また、更新テーブルが正常に動作しますが)...私が望むのはDBからその1つの結果を得ることだけです。

ブラウザでこのファイルに移動するだけで問題はありません。 事前に感謝します。

+1

答えはありませんが、悪意のある人に厄介なものが渡されるため、リクエストから渡された古い値を実行してはいけません。 – Jim

答えて

1

あなたはwhere 1 = 1のようなことをしていますが、それは常に真です。あなたはあなたの列に名前をつけていません。それを番号で置き換えています。

(未確認)これを試してみてください。

"SELECT * FROM ".$table." where id='".$id."'"; 
+0

これはどうしますか?彼はすでにやっていることとどう違うの? –

+0

@juergendは正しかった、これは異なっています、オリジナルはカラムid = $ idを持っていません、それは変数を2回持っていますので、次のようになります:select * from table where 5 = 5; –

+0

申し訳ありませんが、私の間違い - 慎重に質問者のコードを読んでいませんでした。しかし、これは依然として質問の問題に役立ちません。 –

0

あなたは結果のちょうど最初の行を取得したい場合は、次の2つのオプションがあります。

  1. は、クエリ(優先でLIMITを含めますソリューション)

    SELECT * FROM "。$ table。"ここで、」。$ ID。 "= '"。$ ID。「「LIMIT 1"

  2. は、すべてのデータを取得するためにループをしないで、単に最初の行を読んで、それを返す。

+0

最初の行を読み込み、それを返すのは悪いです。まだデータベース側にかなりのオーバーヘッドがあるからです。 –

+0

私は全く同意します - これが私が(1)が好ましい解決策であると述べた理由です。実際には、テーブル全体を照会してから最初の行のみを返す必要がある場合があります。通常、残りのデータで何かを行う必要があるが、表示する必要はありません。私は彼のプログラムの論理を知らないので、これをオプションとして提案する。 –

0

あなたが意味するID = 1、渡す場合は、where ".$id."='".$id."'";にあなたの条件を設定し、そうされています。WHERE 1=1を、そしてそれは常にである、それはすべてのレコードを返すだ理由です

+0

私は上記の間違いを犯しましたが、もちろんプログラムは次のようになります:SELECT * FROM table where key = 'key_value'しかし、キーワードLIMIT 1でも配列はすべてのテーブルの内容に戻ります。他の結果が表示されますか?データベース内のIDはevry行のためにuniqeです... – user1167309

+0

あなたのクエリがどのように読み込まれた後に見えるかを見るには 'echo $ q'を実行できますか? – jere

0
$table = $_REQUEST['table']; 
    $key = $_REQUEST['id']; 
    $key_value = $_REQUEST['id_value']; 

    $q = "SELECT * FROM ".$table." where ".$id."='".$id."'"; 

あなたが代入しています。 $ keyと$ key_valueを使用しますが、$ idを使用します。

+0

私は上記の間違いを犯しましたが、もちろんプログラムは次のようになります:SELECT * FROM table where key = 'key_value'しかし、キーワードLIMIT 1でも配列はすべてのテーブルの内容に戻ります。他の結果が表示されますか?データベース内のIDは、evry行のためにuniqeです... – user1167309

関連する問題