Даже после использования запроса select я получаю несколько строк, вставленных с тем же именем.
Ниже приведен пример аналогичного кода, для которого я столкнулся с вышеуказанной проблемой.
$current_timestamp=date('Y-m-d H:i:s'); //current date-time
$query = "SELECT * FROM table WHERE name = 'variable name' ";
$result=try_mysql_query($link, $query);
if(mysqli_num_rows($result))
{
$updatequery = "UPDATE account_extension SET
updated_at = '$current_timestamp' WHERE name = 'variable name'";
$result = try_mysql_query($link, $updatequery);
}
else
{
$insertsql="INSERT INTO table('name','updated_at')
VALUES ('variable name','$current_timestamp')";
$result = try_mysql_query($link,$insertsql);
}
Правильный способ сделать это в MySQL - это один оператор.
Во-первых, вам нужен уникальный индекс:
create unique index ind_ account_extension_name on account_extension(name);
Затем вы можете:
insert into account_extension(name, updated_at)
values (?, ?)
on duplicate key update updated_at = values(updated_at);
Обратите внимание, что я также заменил переменные на заполнители параметров. Использование параметров - это правильный способ передачи значений в запрос.
В чем преимущества этого подхода?
name
гарантируется независимо от того, как поле может быть вставлено или обновлено.Обновите строку ниже в своем коде:
$query = "SELECT * FROM table WHERE name = 'variable name' ";
С
$query = "SELECT * FROM table WHERE name like '%variable name%' ";
Надеюсь это поможет