PHP Mysql Вставить пакет, если не существует - PullRequest
0 голосов
/ 13 марта 2020

Я искал, что уже есть способ вставки, позволяющий избежать дублирующейся ошибки

ref: MySQL: вставить запись, если ее нет в таблице

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Unknown' AS name, 'Unknown' AS address, '022' AS tele) AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Unknown'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `table_listnames`;

+----+---------+-----------+------+
| id | name    | address   | tele |
+----+---------+-----------+------+
|  1 | Rupert  | Somewhere | 022  |
|  2 | John    | Doe       | 022  |
|  3 | Unknown | Unknown   | 022  |
+----+---------+-----------+------+

есть ли способ сделать это в партии? или как формат добавления данных в виде пакета

ref: вставка нескольких строк с помощью массива php в mysql

Планирование интеграции этого

$sql = array(); 
foreach( $data as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

есть ли способ?

1 Ответ

0 голосов
/ 13 марта 2020

Я бы предложил использовать для этого синтаксис ON DUPLICATE KEY. Это упростит запрос и позволит использовать оператор VALUES(), который удобен для передачи параметров из вашего приложения.

Чтобы это работало, вам нужно уникальное (или первичный ключ) ограничение для colum name. Создайте его, если он не существует:

create unique index idx_table_listnames on table_listnames(name);

Затем вы можете выполнить:

insert into table_listnames(name, address, tele)
values('Unknown', 'Unknown', '022')
on duplicate key update name = values(name)

Предложение конфликта отслеживает нарушения уникального индекса и выполняет обновление без операции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...