- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый вечер форумчане!
Решил поэкспериментировать с MySQL-i-, написал простой запрос на выборку данных из Базы mysql(стандартная база), таблицы user. При обходе строк циклом while результат одной строки выводится бесконечно, насколько я понял. Интересно что если закоментировать цикл, бесконечный перебор заканчивается, но это меня не может устроить, так как хочется увидеть всех пользователей базы. Смотрел примеры http://php.net/manual/ru, http://phpclub.ru.
Как решить проблему, в чем моя ошибка? Поясните подробно...
Код такой:
<?php
$link = mysqli_connect('localhost','root','password','mysql');
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT User, Host FROM User ORDER by Host LIMIT 5";
$result = mysqli_query($link, $query);
if ($result){
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
// while($row){
printf("%s (%s)\n", $row["Host"], $row["User"]);
// }
mysqli_free_result($result);
}
mysqli_close($link);
?>
Я вам так скажу.
mysql_ умирает и очень быстро. Я вам рекомендую сразу переходить на PDO.
Я вам так скажу.
mysql_ умирает и очень быстро. Я вам рекомендую сразу переходить на PDO.
Умирает в каком смысле? Прекращается работа над развитием СУБД? Много ли проектов PHP использует PDO? Есть хорошие мануалы по PDO, насколько я знаю по MySQL куча примеров в интернет, по PDO не уверен. Насколько синтаксис и т.п. PDO отличается от MySQL?
Умирает в каком смысле? Прекращается работа над развитием СУБД? Много ли проектов PHP использует PDO? Есть хорошие мануалы по PDO, насколько я знаю по MySQL куча примеров в интернет, по PDO не уверен. Насколько синтаксис и т.п. PDO отличается от MySQL?
http://php.net/manual/ru/function.mysql-connect.php
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
Отличный мануал: http://php.net/manual/ru/pdo.construct.php
А вы поищите про PDO удивитесь, но это стандарт для многих фреиворком. Особенно отлично PDO тем, что можно перебрасывать на любые СУБД не меняя код запросов.
http://php.net/manual/ru/function.mysql-connect.php
Отличный мануал: http://php.net/manual/ru/pdo.construct.php
А вы поищите про PDO удивитесь, но это стандарт для многих фреиворком. Особенно отлично PDO тем, что можно перебрасывать на любые СУБД не меняя код запросов.
Мой пример как раз с работой не MySQL, а MySQL---i---. Потому и спрашиваю, что решил перейти на новый драйвер. Может я не так написал или не понял что имеется ввиду...
Правильный вариант такой
Мой пример как раз с работой не MySQL, а MySQL---i---. Потому и спрашиваю, что решил перейти на новый драйвер. Может я не так написал или не понял что имеется ввиду...
Я о том, что бы вы не тратили время на замену mysql на mysqlI, а сразу переходили на стандарт PDO
И что за бесконечный цикл?
попробуйте вместо:
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
while($row){
Написать:
while( $row = mysqli_fetch_assoc($result) ){
Я о том, что бы вы не тратили время на замену mysql на mysqlI, а сразу переходили на стандарт PDO
И что за бесконечный цикл?
попробуйте вместо:
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
while($row){
Написать:
while( $row = mysqli_fetch_assoc($result) ){
Пока не уверен, что смогу найти хорошие мануалы для уверенного перехода на PDO.
Благодарю, все заработало. В чем была ошибка, то что в выборка массива каждый раз бралась с самого начала, а не передавалась как аргумент в цикл while? Или не правильно была выбрана функция mysqli_fetch_array, вместо mysqli_fetch_assoc...
---------- Добавлено 28.11.2015 в 23:17 ----------
Правильный вариант такой
Благодарю, этот вариант тоже рабочий. Как я понял условие выборки должно обрабатываться внутри цикла while.
Как я понял условие выборки должно обрабатываться внутри цикла while.
Условия выборки находится в SQL запросе. Внутри цикла while фетчится результат запроса который возвращает false по окончанию обхода. Вы бы почитали документацию что-ли http://php.net/manual/ru/function.mysql-fetch-array.php, либо подтянули логику, потому что в вашем коде она напрочь отсутствует.
Спасибо!
Проблема решена. Была детская ошибка, возможно из-за того, что пример кода совмещался с синтаксисом старой версии MySQL. Там такой код вполне успешно работал.
Никакого отношения версия mysql здесь не имеет. Это банальный баг в логике.
и