mysql_real_escape_string / Говнокод #23415 Ссылка на оригинал

0

  1. 1
UPDATE `xxx` SET `updated_count` = (UPDATE `yyy` SET `zzz` = 0 WHERE `zzz` = 42)

Минимальный код в моей проблеме. Проблема в том, что UPDATE должен возвращать число изменённых строк, а MYSQL говорит, что тут ошибка. Что же мне теперь делать?

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

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

  • апдейт не селект - что он может возвращать? по крайней мере так оно было в старые времена: кол-во апдейтнутых строк было сайд-эффектом апдейта, но не его возвратом (т.е. делалось в два запроса). потому что апдейт не селект - он не возвращает строки значений.
    Ответить
        • В отдельном запросе, а результат получать через API. Если мы, например, вызываем SQL из PHP, то делаем отдельный запрос:
          $cnt = mysqli_query($link, 'UPDATE `yyy` SET `zzz` = 0 WHERE `zzz` = 42');

          А потом в следующем запросе используем полученное значение $cnt.
          Ответить
          • я это и имел в виду когда говорил "сайд-эффект". и к скл он не имеет отношения - это фича софта базы, но не языка.

            я не спец по скл, но я ни в одной базе не видел что бы апдейт (как скл стмт) что то возвращал. возвращать - в скл смысле слова - умеет только селект.

            и как следствие в подзапросе может быть только селект. почему и спрашивал - а в каких диалектах скл апдейт умеет что либо возвращать?
            Ответить
        • Т. е. получается, что для самого языка UPDATE не возвращает ничего, а для внешнего API возвращает количество изменённых строк.
          Ответить
  • > Что же мне теперь делать?
    2 запроса в транзакции?
    Ответить
  • Я вообщде не понимаю зачем делать один запрос.

    У тебя база данных на соседнем континенте, со связью по ISDN, и оплатой за каждый килобайт?
    Ответить
    • И, как обычно, одной функции хватит всем. Т. е. использовать её можно только сразу после запроса, изменяющего строки, пока контекст не изменился. Узнаю подход POSIX.
      Ответить
      • да там все граблями обложено. я думаю что триггеры в модерновый мускль уже завезли?

        с другой стороны, эта функция в далёком прошлом была почти уникальна для мускля: по крайней мере сибас и оракакал ничего подобного не предоставляли, потому что апдейт делался от части асинхронно и спекулятивно, и количества строк которые поменялись те базы не считали и с какой либо точностью и не знали.
        Ответить
      • если бы база данных внутри транзакции держала всю статистику по транзакции, она бы охуела
        Ответить
        • а нельзя что-ли к коннекту привязать?

          Инкаус не совсем прав по позикс: глобальный стейт и правда имел место в никсах и сях 70-х, но его уже очень давно отменили
          Ответить

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

Помни, guest, за тобой могут следить!

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


    8