По сути, у меня есть запрос, который получает число из базы данных, затем мне нужно взять число, превратить его в целое число, чтобы я мог добавить 1 к нему, а затем запросить его снова, чтобы обновить базу данных.
В принципе, я хочу, чтобы каждый раз, когда кто-то щелкает, он обновляет номер базы данных, чтобы он был таким же, как + 1.
Код:
$id = $_POST['id'];
$curr = mysqli_query($mysqli, "SELECT `likes` FROM savage WHERE `id` = '$id'");
$curr2 = intval($curr) + 1;
mysqli_query($mysqli, "UPDATE savage SET `likes`='$curr2' WHERE `id`='$id'");
Я пытался использовать Intval? Я просто делал попытку.
Здесь было бы лучше сделать:
mysqli_query($mysqli, "UPDATE savage SET `likes`=`likes`+1 WHERE `id`='$id'");
Если вы читаете значение в PHP, затем добавляете его, затем сохраняете, вы можете получить данные из синхронизации.
Представьте, что два человека попали на эту страницу одновременно. Если бы они действительно пришли в порядок, вы бы получили:
Человек A: БД читается как 1. Вы добавляете 1 и сохраняете. Значение теперь будет 2.
Человек Б: БД читается как 2. Вы добавляете 1 и сохраняете. Значение теперь будет 3.
Но может случиться так, что каждый читает БД примерно в одно и то же время:
Человек A: БД читается как 1. Вы добавляете 1 и сохраняете. Значение теперь будет 2.
Человек Б: БД читается как 1. Вы добавляете 1 и сохраняете. Значение теперь будет 2.
Другими словами, вы можете увеличивать устаревшее значение и сохранять. Если вы делаете все это в одном операторе SQL, вы не получите эту проблему.
Других решений пока нет …