- из базы данных выдаётся только одно значение, хотя имеются ещё значения, которые соответствуют заданным параметрам (echo $solution2 ["a"]; ) - если в базе данных нет ни одного значения, то должно выходить следующее: Sorry, there are no one with your parameters. Bместо этого выходит значение, которое было занесено в формуляр (может быть потому что это значение уже было занесено до этого в формуляр (if($input == true)), но тогда вопрос как его устранить? Mожет кто-нибудь подсказать, я думаю что нужно применить WHILE, но не знаю как это сделать на практике. Код (Text): if($input == true) { $query2 = "SELECT a FROM tabelle WHERE b LIKE '$b' AND c LIKE '$c' "; $result2 = mysqli_query($cxn, $query2); $solution2 = mysqli_fetch_assoc($result2); } if ($solution2 == 0) { echo "Sorry, there are no one with your parameters."; } else { echo $solution2 ["a"]; }
http://php.net/manual/ru/mysqli-result.fetch-assoc в доках на php.net очень полезные примеры самой справки и куча ништяков в комментариях. читай справку полностью. поищешь на странице слово "while", найдешь то, что надо.
Не факт. Добавьте limit 1 чтобы стало фактом и не пришлось применять while И тогда вот так: Код (Text): if($solution2 = mysqli_fetch_assoc($result2)) echo $solution2['a']; else echo "Sorry, there are nobody with your parameters." А точно там должно быть ничтожество? - Sorry, there are nobody with your parameters - Простите, но там ничтожество с вашими характеристиками.
Код (Text): $query = "SELECT email FROM tabelle WHERE year LIKE '$year'"; if ( $result = mysqli_query($cxn, $query) ) { while ( $row = mysqli_fetch_assoc($result) ) { echo $row['email']."\r\n"; } mysqli_free_result($result); } else { echo "Sorry, there are no emails"; } переделал, но почему-то всё равно не работает Код (Text): if ($result = mysqli_num_rows( $query)) { while ( $row = mysqli_fetch_assoc($result)) { echo $row['email']."\r\n"; } mysqli_free_result($result); так тоже
вот тут еще логика верная. честно говоря не понимаю зачем проверять был ли результат запроса. если есть результат то фетч_ассоц будет возвращать строки. если нет - ругнется. но для этого можно после выполнения запроса проверять состояние ошибки.
Пустой результат не генерит ошибку, при этом ошибка в запросе и чтении результата генерит свое прерывание, которое не для пользователей, придется отлавливать, разбираться, геморрой. В стопицот раз проще проверить количество строк и сделать свое прерывание, типа Код (Text): if($result->num_rows < 1) throw new Exception('Пользователь не найден'); Добавлено спустя 11 минут 32 секунды: UPD, да, можно и так Код (Text): if(!$s = $r->fetch_assoc()) throw new Exception('Пользователь не найден'); // юзаем $s Добавлено спустя 9 минут 46 секунд: Посмотрел коды, вспомнил почему можно, но не можно. $s получается буфером, временной переменной, в рабочую null писать нельзя, ибо там, допустим, должен быть Array. Следовательно получив успешно в $s придется переписывать в рабочую. Ну вот, а проверка числа строк избавляет от лишних забот. Полностью получается так Код (PHP): if($result->num_rows < 1) throw new Exception('Пользователь не найден'); $work_var = $result->fetch_assoc(); // тут уже стопудово массив $result->free();
Чтобы лишний раз не обращаться к функции которая генерит строки. Хотя на этот счет я думаю не стоит париться, если будет ошибка, она будет и ее лучше исправить.