#php #mysql
#php #mysql
Вопрос:
У меня есть работающий mysql_query:
mysql_query("update products set buyers = buyers $qtd where id=$pid") or die (pgs_log("erro linha 70 >".mysql_error()));
Но затем я вставляю следующий запрос сразу после него, и он выполняет только первый:
mysql_query("update products set pending = pending-$qtd where id=$pid") or die (pgs_log("erro linha 70 >".mysql_error()));
Итак, я что-то упускаю?
Комментарии:
1. попробуйте
echo
вывести sql-запросы на экран и посмотреть, работает ли по-прежнему$qtd
and$pid
, если это не так, проверьте свойpgs_log
(не уверен, что он делает). Запрос выдает ошибку или страница просто загружает базу данных, но без изменений?2. в вашем коде есть дыра для SQL-инъекций, измените
where id=$pid")
наwhere id='$id'")
. т. е. заключите все это$vars
в одинарные кавычки, иначе вашиmysql_real_escape_string
будут напрасны.
Ответ №1:
Пара вещей. Во-первых, для этого вам не нужны два отдельных запроса. MySQL может быть сбит с толку, думая, что ваше значение является именем столбца из-за тире:
mysql_query("
UPDATE `products`
SET `buyers` = `buyers` $qtd,
`pending` = `pending` - $qtd
WHERE `id` = $pid") or die (pgs_log("erro linha 70 >".mysql_error()));
Ответ №2:
если вы хотите дважды проверить, что ваше обновление действительно обновило данные, тогда вам следует исследовать mysql_affected_rows. Вам нужно будет проверить, что ваше старое значение отличалось от вашего нового значения, в противном случае у вас будет ноль затронутых строк, что сделает эту проверку бесполезной.
Вы не используете правильные кавычки вокруг ссылок на таблицы и столбцы. Они должны быть окружены обратными галочками и могут быть объединены следующим образом:
UPDATE
`products`
SET
`pending` = `pending` - $qtd,
`buyers` = `buyers` $qtd
WHERE
`id` = $pid;
Ответ №3:
mysql_query("update `products`
set `pending` = `pending` - $qtd,
`buyers` = `buyers` $qtd
where `id` = $pid")
or die (pgs_log("erro linha 70 >".mysql_error()));