SQL

MySQL-запрос на обновление строки работает некорректно.

Чет запрос обновления не работает. Точнее работает, но неправильно, все никак разобраться не могу

Выводит сообщение "Good!", но в БД меняется значение vote на ноль и все.

Пробовал в таблице типы менять на varchar, int, но все бестолку.

$mysqli = new mysqli('localhost', '********', '*******', '********');

$SV4 = "UPDATE vote_statistics SET vote='6' and sum_of_ratings='6' and average_rating='6' WHERE id='1' LIMIT 1";

if(mysqli_query($mysqli, $SV4)){echo "Good!"; }else{echo "Ошибка! Не удалось обновить данные в БД!".mysqli_error($mysqli); }
vote='6' and sum_of_ratings='6' and average_rating='6'
Видимо работает не так, как Вы думаете. при AND тут происходит логическое "И", отсюда результат = 0.
https://ru.wikipedia.org/wiki/Конъюнкция

По запросу не совсем понятно что Вы хотели сделать. Если установить sum_of_rating тоже в 6 - есс-но так работать не будет. См. как запросом обновить несколько колонок.
https://www.w3schools.com/sql/sql_update.asp

Если при условии sum_of_ratings = '6', то очевидно условие нужно перенести в where.

ЗЫЖ Про LIKE выше бред. Как раз при возможности лучше LIKE избегать.
Борян Ефимов
Борян Ефимов
84 764
Лучший ответ
Борян Ефимов ЗЫЖ по ссылке фактически то, что пишет Андрей. Просто я хотел показать автору вопроса ресурс, а не конкретно его проблему. =)
UPDATE vote_statistics
SET vote = '6', sum_of_ratings = '6', average_rating = '6'
WHERE id = '1'
LIMIT 1

Если id - первичный ключ, то использовать LIMIT не имеет смысла - запись и так одна.

Согласен с предыдущим отвечающим: использовать LIKE вместо =, это абсолютная глупость, тиражируемая всяческими говнокурсами.
В MySQL производится автоматическое предобразование строка<->число, так что разницы между ='1' и =1 в данном случае нет.
Артем Сэрхажид
Артем Сэрхажид
51 597
Во-первых, нужно указывать базу, к которой принадлежит таблица.
Во-вторых, не понятно, какого типа поля таблицы. Они все текстовые или нет?
В-третьих, если в WHERE ставишь условие для текстового поля, то желательно использовать конструкцию типа WHERE имя_поля LIKE...,а не where имя_поля ='...' А если проверяешь числовое поле, то - WHERE имя_поля =какое-нибудь числовое значение, а не имя_поля='...'(то есть без кавычек для текста).
И внутри строки запроса тоже желательно поставить точку с запятой - "UPDATE...LIMIT 1;";