Я не знаю, как приступить к выполнению следующего действия в моей конкретной таблице.Добавить или обновить MySQL
Скажем, у меня есть следующие table param
, с 3-мя колоннами tck
, label
, value
. tck
- мой основной ключ.
Данные поступают один раз в день. Я хотел бы обновить значение существующего tck
, и если отправленные данные содержат новый tck
, я хотел бы добавить его в таблицу ...
Надеюсь, я достаточно ясен ... Спасибо для вашей помощи.
код я использую следующий:
<?php try {
$bdd = new PDO('mysql:host='.$_ENV['localhost'].';dbname=eip_tasks','root'); } catch(Exception $e) {
die('Erreur : '.$e->getMessage()); }
$data = $_POST['field1'];
$phpArray = json_decode($data, true); foreach ($phpArray as $u) {
//$req = $bdd->prepare('INSERT INTO param (tck, label, value) VALUES(:tck, :label, :value)');
$req = $bdd->prepare('UPDATE param SET value=:value WHERE tck=:tck');
$req->execute(array(
':tck'=>$u['tck'],
':value'=>$u['value']
)); } ?>
Вот код, я использую в настоящее время:
<?php
try
{
$bdd = new PDO('mysql:host='.$_ENV['localhost'].';dbname=eip_tasks','root');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$data = $_POST['field1'];
$phpArray = json_decode($data, true);
$sourceTck = array();
foreach ($phpArray as $u) {array_push($sourceTck, $u['tck']);
$req = $bdd->prepare("INSERT INTO param (tck, label, value) VALUES (:tck, :label, :value) ON DUPLICATE KEY UPDATE value=:value");
$req->execute(
array(
':tck'=>$u['tck'],
':label'=>$u['label'],
':value'=>$u['value']
)
);
}
if(count($sourceTck) > 0){
$sourceTckClause = implode("," , $sourceTck);
$req = $bdd->prepare("DELETE FROM param WHERE tck NOT IN ($sourceTckClause)");
$req->execute();
}
?>
[в основном, 'INSERT ... ON DUPLICATE KEY UPDATE ...' запросов] (http://stackoverflow.com/a/1361368/112968) – knittl