PHP Пока l oop делает так много раз в дБ - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь определить, истек ли срок действия данных в БД, и он прекрасно работает, если у меня есть только данные, чтобы проверить, когда нужно проверить несколько данных, тогда все будет как-то следовать первое поведение

while($row=mysqli_fetch_assoc($exe))
{   
    date_default_timezone_set("Asia/Taipei");
    echo $row['ExpeTime']." ";
    echo $ExpTim=strtotime($row['ExpeTime']);
    echo " ";
    echo $TWnowSec=date("U");
    echo " ";

    /*if($ExpTim>$TWnowSec){
        echo "沒過期";
    }elseif($ExpTim<$TWnowSec){
        echo "過期了";
    }*/

    if($ExpTim<$TWnowSec) {
        $sql= "UPDATE productneeds SET Status='已過期';";
        if(!mysqli_stmt_prepare($stmt, $sql)){
            echo "update failed";
        }else{
            mysqli_stmt_execute($stmt);
            echo "sucess";
        }
    }else {
        echo "{$row['O_no']} is not expired<br>";
    }
}

1 Ответ

1 голос
/ 21 апреля 2020

Рассмотрим чистый SQL запрос на обновление и избегайте циклов PHP. Поскольку вы, похоже, зацикливаетесь на другой выборке набора записей, выполните UPDATE...JOIN поддерживаемый запрос *1001*, чтобы обновить записи в одной или нескольких таблицах. Некоторые корректировки, необходимые для достижения необходимого часового пояса. Ниже приведена демонстрация для вас:

// SET MYSQL SESSION TIME ZONE TO GMT
$sql = "SET TIME_ZONE = '+00:00';"        
mysqli_query($conn, $sql);

// RUN UPDATE + JOIN WITH ADJUSTMENT FOR 'Asia/Taipei' TIME ZONE
$sql = "UPDATE productneeds p
        INNER JOIN myotherTable t
           ON p.myRelatedID = t.myRelatedID
        SET p.Status = '已過期' 
        WHERE t.ExpeTime < NOW() + INTERVAL 8 HOUR"; 

mysqli_query($conn, $sql);
...