Arris
@Arris
Сапиенсы учатся, играя.

Перебор строк в MYSQL-ответе (mysql_query / mysql_fetch_assoc), как сделать кошерно?

В очередной раз занялся рефакторингом своего кода.

Всю жизнь писал так:
$request = @mysql_query($query); // да, я знаю, подавление ошибок таким методом плохо, но вопрос не в этом :)
        if ($request) {
           while ($row = mysql_fetch_assoc($request)) // PHPStorm рапортует тут!
            { ..... }

и горя не знал. И все работало. А тут мне PHPStorm рапортует на выделенной строчке.

Using assignments in conditional expressions may cause errors that a hard to detect and is therefore considered bad programming practice.

И я прекрасно понимаю, что это действительно bad programming practice. Но как это делают красиво и кошерно?

Нубский вопрос, я понимаю :)
  • Вопрос задан
  • 5199 просмотров
Решения вопроса 1
@SilverSlice
Вы же сами видите, что удобство работы с "голым" расширением mysql стремится к 0. Вам действительно нравится писать бесконечные mysql_real_escape_string и бегать циклами по результату запроса?

Если нет возможности внедрять PDO или другие обертки в свой legacy-код, следует написать свою, которую уже сейчас можно будет использовать. А нужно от неё совсем немного:

1. Удобство получения данных.
Вместо
$result = mysql_query($query);
if ($result) {
    $items = array();
    while ($row = mysql_fetch_assoc($result)) {
        $items[] = $row;
    } 
}

мне хочется использовать
$items = db_get_all($query);

2. Удобство подстановки данных в запрос.
Вместо
mysql_query("SELECT * FROM table WHERE field = '" . mysql_real_escape_string($one) . "' OR field2 = '" . mysql_real_escape_string($two) . "'");

мне хочется использовать
db_query("SELECT * FROM table WHERE field = ? OR field2 = ?", $one, $two);


Вот нашел свой старый wrapper, можете написать подобный и сильно облегчить себе работу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
- Больной перед смертью потел?
- Потел, доктор!
- Это хорошо.

Это очень смешной вопрос. Прочитав половину, я тоже наладился было объяснить про ПДО, но прочитав до конца, я снова, в который раз убедился, что читающий вопросы любителей РНР, над анекдотами не смеётся.

Вопрос звучит примерно так: "Доктор, вот у меня двустороннее восполение легких, тут гангрена правой ступни, здесь опухоль головного мозга. И ещё вот прыщик вскочил. Подскажите, как его вылечить. Нет, я понимаю, что от воспаления умирают. Меня это сейчас не волнует. мне бы прыщик."

И, традиционно же, у наших любителей с логикой так же плохо, как и с чувством юмора. Ведь, если озаботиться излечением конкретно этого прыщика, то переписывать его в половине кода придется всё равно. Ну так если все равно переписывать - почему не сделать сразу по-человечески? Но нет - "чего тут думать - тут прыгать надо!"
Ответ написан
error500
@error500
PHP-developer
Используй PDO.
Ответ написан
@eldar_web
А где же запрос $r?
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Кошерно не писать код по пятницам. Можно преобразовать\заменить цикл, либо перейти на ООП подход, так легче отлавливать ошибки при работе с mysql.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы