2012-01-24 4 views
1

Я боролся с этой проблемой в течение нескольких дней и не могу добиться каких-либо успехов ... Я пытаюсь получить только один результат из моей базы данных, но, м получает всю таблицу: (Android Mysql - слишком много результатов

PHP:

{ 
    $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)); 
} 

Я думаю, что нет никакой необходимости, чтобы показать вам мой андроид код, что, поскольку данные получены хорошо (также обновление таблиц отлично работает) ... все, что я хочу, - получить этот ОДИН результат из моей БД.

Когда вы просто переходите к этому файлу в браузере, проблем нет ... Заранее спасибо, приветствия

+1

Не ответ, но вы не должны запускать какие-либо старые значения, которые передаются из запроса, из-за чего кто-то противно проходит что-то злонамеренное. – Jim

ответ

1

Вы делаете что-то вроде where 1 = 1, и это всегда так. Вы не называете свою колонку. Вы заменяете это числом.

попробовать это (непроверенные):

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

И что это будет делать? Чем он отличается от того, что он уже делает? –

+0

@juergend правильно, это другое, оригинал не имеет идентификатор столбца id = $ id, он имеет переменную дважды, поэтому это будет что-то вроде: select * from table, где 5 = 5; –

+0

Извините, моя ошибка - недостаточно внимательно прочитал код айзера. Однако это еще не помогает в вопросе. –

0

Если вы хотите получить только первую строку из результатов, то у вас есть два варианта:

  1. включают LIMIT в запросе (предпочтительнее раствор)

    SELECT * FROM ". $ table." где». $ ID. "= '". $ ID."' LIMIT 1"

  2. не цикл, чтобы получить все данные, просто прочитать первую строку и вернуть его.

+0

Чтение первой строки и возврат ее плохой, так как у вас по-прежнему относительно много накладных расходов на стороне базы данных. –

+0

Я полностью согласен - поэтому я сказал, что (1) является предпочтительным решением. На самом деле может быть какой-то правильный случай, когда вам нужно запросить всю таблицу, а затем вернуть только первую строку: обычно, когда вам нужно что-то делать с остальными данными, но не нужно ее отображать.Я не знаю логики его программы, поэтому предложил это как вариант. –

0

вы настраиваете свое состояние на where ".$id."='".$id."'";, поэтому, если вы передаете идентификатор = 1, что будет означать:. WHERE 1=1, и это всегда правда, поэтому это возвращение всех записей

+0

Я сделал ошибку выше, конечно, программа идет как: SELECT * FROM table, где key = 'key_value', однако даже с ключевым словом LIMIT 1 массив все еще возвращается со всем содержимым таблицы. Хотя я и зацикливаю результаты, другие результаты подобраны? ID в базе данных является uniqe для evry row ... – 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, где key = 'key_value', однако даже с ключевым словом LIMIT 1 массив все еще возвращается со всем содержимым таблицы. Хотя я и зацикливаю результаты, другие результаты подобраны? ID в базе данных является uniqe для строки evry ... – user1167309

Смежные вопросы