Я импортирую CSV и сохраняю значения в базе данных, а затем отображаю их на странице php.
CSV
страница php
Требование:
теперь, когда я импортирую другой CSV, если значение первого столбца [AWB] такое же [уже существует в БД], то я хочу обновить второй столбец CSV.
Проблема :
Но сейчас это не импорт, а просто пропуск ....
if (isset($_POST["Import"])){
$filename=$_FILES["file"]["tmp_name"];
if ($_FILES["file"]["size"] > 0)
{
$file = fopen($filename, "r");
$i=0;
while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
{
$getData = array_map("utf8_encode", $getData);
if ($i==0){$i++;continue;}
$sql = "INSERT into do_order (tracking_id,
order_id
)
values ('".mysqli_real_escape_string($conn , $getData[0])."',
'".mysqli_real_escape_string($conn , $getData[1])."'
)";
// print $sql;
// die();
$result=$db_handle->executeUpdate($sql);
// print_r($db_handle->errorInfo());
if (!isset($result))
{
echo "";
}
else {
echo "";
}
$i++;
}
fclose($file);
}
}
echo "";
кстати, вы должны использовать подготовленные операторы вместо этого материала mysqli_real_escpape_string, что значительно упрощает понимание вашего SQL и лучше защищает от SQL-инъекций.
@KarstenKoop, спасибо, я попробовал UPDATE, но у меня ничего не вышло ...
@KarstenKoop Я использую столбец id как primary key, а не awb .....
поместите уникальный ключ на awb и сделайте то, что говорит @KarstenKoop.
@Cemal это правильно: $sql = "UPDATE into do_order set unique_key = 'tracking_id' (tracking_id, order_id)
Насчет названий столбцов не уверен, поправьте сами. Ваши изображения говорят, что у вас есть столбец ORDERID, ваш код сообщает, что у вас есть order_id, и вы просите tracking_id
Позвольте нам продолжить обсуждение в чате.
нужно делать ALTER TABLE только один раз, а не в каждой вставке
попробуйте это (case in mysql) - INSERT INTO do_order (tracking_id, order_id) VALUES ((CASE tracking_id WHEN '37' THEN NULL ELSE tracking_id END), (CASE order_id WHEN '4' THEN NULL ELSE order_id END));
@Cemal, я пробовал, как вы сказали: pastebin.com/1JnsRch0, но у меня это не сработало ....
@vickeycolors: вы можете использовать тот же способ для обновления, а также просто изменить запрос
@vickeycolors ты вообще sql bro? ALTER TABLE должен запускаться без php, не включайте его в php, оставьте INSERT в начале вашего запроса. просто запустите его из phpadmin или sthg в таблице do_order. См. Ответ ниже






Это можно сделать двумя способами.
Вы можете проверить наличие awb (идентификатор отслеживания) с помощью SELECT * FROM do_order WHERE tracking_id='puthereyourtrackingvaluefromcvs', и если количество строк для него> 0, тогда выполните UPDATE do_order SET order_id = 'PutYourNewOrderIdFromCvs' WHERE tracking_id='puthereyourtrackingvaluefromcvs'
Или вы можете изменить схему своей таблицы один раз, выполнив
ALTER TABLE do_order ADD UNIQUE (`tracking_id`);
затем в каждой вставке
$sql = "INSERT into do_order (tracking_id,order_id) values
('".mysqli_real_escape_string($conn , $getData[0])."','".
mysqli_real_escape_string($conn , $getData[1])."')
ON DUPLICATE KEY UPDATE order_id = '".mysqli_real_escape_string($conn , $getData[1])."'";
Важная заметка Не используйте mysqli * и даже если вам нужно, используйте подготовленные заявления
спасибо, попробовал ALTER TABLE do_order ADD UNIQUE (tracking_id);
чем я использовал это: pastebin.com/zHCH6AM7, пожалуйста, проверьте и скажите мне
ON DUPLICATE KEY SET order_id = '".mysqli_real_escape_string($conn , $getData[1])."'"; означает, что он позволит дублировать заказы?
Значит, если awb такой же, то чем он обновит столбец order_id?
но это не работает для меня ..... это не обновляет новое значение в столбце order_id .....
такое awb = идентификатор отслеживания?
ну, используйте
UPDATEвместоINSERT, или, если хотите, используйтеINSERT ... ON DUPLICATE KEY UPDATE, если столбец AWB является вашим первичным ключом