Как я могу вставить строку в базу данных (Sybase SQL Anywhere 12.5)
если он не существует, и обновить, если он существует?
Я пытаюсь следующее:
$stmt = $conn->prepare('INSERT INTO customer_info (user_id, fname, lname) VALUES(:user_id, :fname, :lname)
ON DUPLICATE KEY UPDATE fname= :fname2, lname= :lname2');
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
$stmt->bindParam(':lname', $_POST['lname'], PDO::PARAM_STR);
$stmt->bindParam(':fname2', $_POST['fname'], PDO::PARAM_STR);
$stmt->bindParam(':lname2', $_POST['lname'], PDO::PARAM_STR);
Это дает следующее ошибка:
[Sybase] [Драйвер ODBC] [SQL Anywhere] Синтаксическая ошибка рядом с «ON» в строке 1
Это проблема совместимости?
Как я могу это сделать?
Вы должны прочитать в REPLACE INTO
пример синтаксиса для этого будет:
REPLACE INTO my_table (pk_id, col1) VALUES (5, '123');
Это автоматически идентифицирует первичный ключ и находит соответствующую строку для обновления, вставляя новую, если ничего не найдено.
добавлять ON EXISTING UPDATE
к оператору вставки, например:
INSERT INTO customer_info (user_id,fname,lname) ON EXISTING UPDATE VALUES(Value1,Value2,Value3);