Обновите int в MySQL Field - PullRequest
2 голосов
/ 26 мая 2011

Как я могу увеличить int в ячейке базы данных MySQL? Я знаю, что автоинкремент бесполезен, потому что я никогда не хочу добавлять новую строку, просто обновлять существующую. В настоящее время я использую это (POST var используется для уточнения, проверено в реальном коде):

$columnToUpdate = 'type'.$_POST['voteid'];
$query = "UPDATE myTable $columnToUpdate = $columnToUpdate+1 WHERE id=1;";
if(!mysql_query($query)) {
    echo json_encode(array('success' => false, 'message' => 'Update failed: '.mysql_error()));
    exit;
}

В базе данных у меня есть 6 полей: id, type1, type2, type3, type4, type5 и одна строка с идентификатором, установленным в 1. Цель состоит в том, чтобы получить число (1-5) и создать ссылку в правильный столбец перед обновлением поля. В результате получается Update failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=type4+1 WHERE id=1' at line 1, поэтому я думаю, что значение поля не выводится должным образом до его увеличения.

Как только это сработает, мне также нужно будет уменьшить поле таким же образом, если только его значение не равно 0. Так что для бонусных баллов я могу сделать все это в одном запросе или лучше разделить его до

Ответы [ 3 ]

13 голосов
/ 26 мая 2011

Я думаю, что вы пропустили ключевое слово "SET" из вашего запроса - попробуйте

$query = "UPDATE myTable SET $columnToUpdate = $columnToUpdate+1 WHERE id=1;";

Edit:

Чтобы сделать «декремент, если он не равен нулю», вы можете использовать что-то вроде:

UPDATE myTable SET $columnToUpdate = 
CASE $columnToUpdate 
    WHEN 0 THEN 0
    ELSE $columnToUpdate - 1
END CASE
WHERE id=1;`
3 голосов
/ 26 мая 2011

Для бонусных баллов, чтобы уменьшить:

$query = "UPDATE myTable SET '$columnToUpdate' = '$columnToUpdate'-1 WHERE id=1 AND '$columnToUpdate' > 0";
0 голосов
/ 26 мая 2011

Помимо проблем с внедрением, похоже, что вашему рабочему процессу может потребоваться некоторая работа. Вы уверены, что хотите выбрать столбец, который будет обновляться на основе переменной POST? Похоже, вы бы указали столбец и использовали переменную, чтобы найти запись, которую нужно обновить:

IE: "UPDATE myTable SET votes=votes+1 WHERE id=$post_variable;"

Опять вы должны отправить переменную в виде параметризованного запроса , чтобы защитить себя от внедрения SQL.

...