"PHP" / Говнокод #2393 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
while ($char_list = mysql_fetch_array($char_list_query,MYSQL_ASSOC) or die(mysql_error())) {
    echo "<option>{$char_list['name']}</option>";
}

Запостил: POPSuL POPSuL, (Updated )

Комментарии (28) RSS

  • и в чём воняет? ( "<option>{$char_list['name']}</option>" - ?)
    Ответить
    • while ($char_list = mysql_fetch_array($char_list_query,MYSQL _ASSOC) or die(mysql_error()))
      Ответить
  • Книги Российских афтаров учат студентов. 😀
    Ответить
  • вообще забавно, автор интересно представляет, что будет с сайтом, когда сработает его die, или "срать на пользователей, у меня ТУТ ОШИБКА!" =)
    Ответить
      • вообще-то я этого не опровергал.. между строк прочли? 0-о
        Ответить
        • > "срать на пользователей, у меня ТУТ ОШИБКА!"
          Других вариантов я у Вас не увидел
          Ответить
      • Дай будет только если будет ошибка. Читай как работает or
        Ответить
        • Проверь. И посоветую почитать как выполняются логические операторы.

          Подсказка: die сработает, когда больше не будет записей, т.е. левая половина будет false. PHP ничего не останется как проверить правую часть, т.е. выполнить die
          Ответить
          • А по моему вы ошибаетесь, or die() сработает в том случае если mysql_fetch_array() не сможет нормально выполнить запрос. А не в том случае если в базе закончатся строки.
            Ответить
            • Проверь.

              Заодно почитайте, что возвращает mysql_fetch_array когда записи заканчиваются

              По вашему, цикл while никогда не может быть завершен (не в данном случае, а без die), так как в условии всегда будет логическое true
              Ответить
              • По вашему я сказал что die() нужен? Я говорил что по логике там die не нужно!
                по поводу mysql_fetch_array():
                Смотрим что она возвращает из мануала по рнр и радуемся!
                ---------------------------------------------
                Описание
                array mysql_fetch_array ( resource $result [, int $result_type ] )
                Возвращает массив с обработанным рядом результата запроса, или FALSE, если рядов больше нет.

                mysql_fetch_array() расширенная
                Ответить
                • Вы сказали, что die сработает в том случае если mysql_fetch_array() не сможет нормально выполнить запрос. А не в том случае если в базе закончатся строки.

                  Я что-то не вижу в этих строках, где вы говорите что die не нужен. Исходя из последнего предложения, die сработает только тогда когда будет не правильный запрос, а когда строки закончатся, он не сработает
                  Ответить
                • Ладно, вернемся к истокам. В чем я ошибся?

                  Я, скорее, не точно выразился, так как die сработает только тогда, когда выберет все записи или их не будет. Но в данном цикле die сработает всегда
                  Ответить
                • Сначала пишите
                  > die() сработает в том случае если mysql_fetch_array() не сможет нормально выполнить запрос

                  А потом меня же тыкаете в мануал и показываете когда же mysql_fetch_array вернет false. Я и до Вас это прекрасно знал
                  Ответить
            • Кстати, запрос уже выполнен с помощью mysql_query (предположительно удачно), а тут уже выбираются результаты
              Ответить
              • Я имел ввиду выборку данных из результата mysql_query() в данном случае с $char_list_query
                Ответить
    • А что лучше, чтоб перед пользователем был косой вариант сайта? Если чел не умеет работать с обработчиком ошибок, то ему и делать ни чего не остается как кроме работать с die
      Ответить
      • по крайней мере это нельзя оставлять на волю случая, а предусмотреть.. В случае с генерацией options для select ничего супер-страшного не произойдёт. А ошибку логировать.
        Ответить
        • Возможно ничего страшного и не произойдет. Но если эти селекты выводились вверху страницы? Ну что в конце то концов получится? Косячный сайт? Не думаю что это наилучшее решение
          Ответить
          • я думаю мы одинаковы во мнении, что ошибку нужно ловить и что-то с ней делать. Что именно делать - это уже делали реализации, которые обсуждаются, в том числе и исходя из конкретной задачи. =)
            Ответить
            • Возможно) ^_^ Я к примеру часто, редиректю на страницу с ошибкой, и извинениями пользователю. При этом в базу заношу $_SELF; и причину ошибки если она одна из тех что я мог предусмотреть, если нет то по $_SELF очь легко потом найти ошибку) И залатать ее
              Ответить
              • ага.. ещё бы был вариант отловить fatal error, с продолжением работы 🙁
                Ответить
                • В принципе можно некоторые фаталы выловить
                  <?
                  function ob_complete($str){
                  	$str .= "\n<br><b>my fatal error</b>";
                  	return $str;
                  }
                  
                  ob_start('ob_complete');
                  $c = new NotExistClass;
                  print 'test';
                  
                  ?>

                  Но при условии, что в функция отработает без ошибок
                  Ответить
                  • Я соглашаюсь с тем что вы правы по поводу того что когда mysql_fetch_array() выдаст false в то время когда все записи будут извлечены. Функция die() получит false, то есть верное для нее решение, поскольку именно в этом случае в данном примере она сработает.
                    Я решил на всякий случай проверить на локалке. в первый раз вроде все норм получилось)
                    <?php
                    /* Connecting, selecting database */
                    $host = 'localhost';
                    $user = 'root';
                    $pswd = '';
                    $db_name = 'pdo';
                    $db_link = mysql_connect($host, $user, $pswd);
                    if (!$db_link) {
                       die("Could not connect: " . mysql_error());
                    }
                    mysql_select_db($db_name) or die("Could not select database");
                    $sql = 'SELECT * FROM first';
                    $result =  mysql_query($sql);
                    while($row = mysql_fetch_array($result) or die('111')){
                    	echo<<<FOO
                    	 первое значение {$row['name']} <br />
                    	 &nbsp &nbsp &nbspвторое значение {$row['value']}<br />
                    	
                    FOO;
                    } 
                    /* Performing SQL query */
                    mysql_close($db_link);
                    ?>

                    Не понял юмора и сделал проверку, все дело в том что функция die при заканчивание сценария выдавала белый экран, при этом до этого все записи выводились)
                    <?php
                    /* Connecting, selecting database */
                    $host = 'localhost';
                    $user = 'root';
                    $pswd = '';
                    $db_name = 'pdo';
                    $db_link = mysql_connect($host, $user, $pswd);
                    if (!$db_link) {
                       die("Could not connect: " . mysql_error());
                    }
                    mysql_select_db($db_name) or die("Could not select database");
                    $sql = 'SELECT * FROM first';
                    $result =  mysql_query($sql);
                    while($row = mysql_fetch_array($result) or die('111')){
                    	echo<<<FOO
                    	 первое значение {$row['name']} <br />
                    	 &nbsp &nbsp &nbspвторое значение {$row['value']}<br />
                    	
                    FOO;
                    } 
                    // Этот echo(); не сработает из-за die();
                    echo "<br />тест на валидность";
                    /* Performing SQL query */
                    mysql_close($db_link);
                    ?>
                    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8