Str2date php или mysql

Мне нужно отфильтровать данные в таблице, удалив «последние два часа». Я импортирую данные, загружая CSV, который не могу изменить, и использую только 3 поля. одно из полей - datetime, но импортируется как строка - 05 Dec 2018 22:20 Мне нужно как-то посчитать последние два часа формы и удалить их из таблицы. Я пробовал str to date в mysql, но продолжаю получать ошибку, недопустимое значение datetime, я пробовал strtotime в php, но то же самое .. Неважно, как он удаляется при импорте csv. Я использую его для импорта.

<?php

include('connection.php');
$con = getdb();

if (isset($_POST["Import"])){        
    echo $filename=$_FILES["file"]["tmp_name"]; 

    if ($_FILES["file"]["size"] > 0)
    {
        $file = fopen($filename, "r");
        $getData = fgetcsv($file, 10000, ",");
        while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
        {
            $getData = str_replace("'","''",$getData);
            $sql = "INSERT into test2 (type_ID,name,Last_Contact) values ('".$getData[3]."','".$getData[4]."','".$getData[12]."')";
            // $sql = "INSERT into test2  (date) = STR_TO_DATE(Last_Contact, '%d %b %Y %H:%i')";

            $result = mysqli_query($con, $sql);
            var_dump(mysqli_error_list($con));
            //exit();
            if (!isset($result))
            {
                echo "<script type=\"text/javascript\">
                           alert(\"Invalid File:Please Upload CSV File.\");
                           window.location = \"index.php\"
                     </script>";        

                // $sql = "INSERT into test2  (date) = STR_TO_DATE(Last_Contact, '%d %b %Y %H:%i')"; this part if unmasked returns error

Какие-либо предложения?

--update, и я считаю, что легко удалил бы, если бы у меня было правильное datetime

Baha 06.12.2018 02:01

Правильный отступ в коде имеет большое значение.

Ibu 06.12.2018 02:05

Вам следует научиться использовать подготовленные операторы вместо подстановки переменных в строку SQL. Тогда вам не нужно было бы удваивать кавычки.

Barmar 06.12.2018 02:12

Вы не должны вставлять дату отдельным запросом. Это поместит дату в другую строку из других полей.

Barmar 06.12.2018 02:14

@Barmar, я не против, даже лучше. Я проверил предложенный вами запрос, но продолжаю получать ошибки Предупреждение: mysqli_prepare () ожидает ровно 2 параметра, 1 из которых указан в / var Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, значение null указано в / var

Baha 16.12.2018 23:49

Я забыл аргумент $con для mysqli_prepare().

Barmar 17.12.2018 17:26

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

Baha 19.12.2018 23:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать подготовленное заявление. Проблема в том, что вы не вызываете STR_TO_DATE() в строке, которую вы только что вставили в таблицу. Ваш второй запрос INSERT не имеет никакого отношения к предыдущему, поэтому он не может получить доступ к столбцу Last_Contact, который вы только что вставили.

Вы должны вызвать STR_TO_DATE() для строки, которую вы прочитали из CSV, а не для столбца таблицы, так как вам нужно вставить это в ту же строку.

Вам также следует использовать подготовленный оператор, а не объединять переменные.

$type_id = $name = $date = null;
$stmt = mysqli_prepare($con, "INSERT INTO test2 (type_ID, name, Last_Contact, date) VALUES (?, ?, ?, STR_TO_DATE(?, '%d %b %Y %H:%i'))");
mysqli_stmt_bind_param($stmt, "ssss", $type_id, $name, $date, $date);
while ($getData = fgetcsv($file, 10000, ",")) {
    $type_id = $getData[3];
    $name = $getData[4];
    $date = $getData[12];
    mysqli_stmt_execute($stmt);
}

Другие вопросы по теме