簡體   English   中英

PHP while語句的問題

[英]Issues with PHP while statement

我試圖運行一個while語句,該語句將基於uniqueID在mysql數據庫中設置一列。

我已經做了很多次,但是我不確定這次我做錯了什么。

基本上,它可以正常工作,直到我實際告訴它保存表為止。 這是我的代碼

$alertAdmin = mysqli_query($con, "SELECT * FROM tickets WHERE notified='0'");
    $tcheckNotifs = mysqli_num_rows($alertAdmin);

    if($tcheckNotifs > 0) {
        echo "test<br><br>";
        while($row = mysqli_fetch_array($alertAdmin))
            {
                $Unique = $row['UniqueID'];
                echo $Unique.' ';
                $sql = "UPDATE tickets SET `notified`='1' WHERE `UniqueID`='$Unique'";
                //mysqli_query($con, $sql);
            }
    }

這適用於回顯UniqueID,並回顯正確的ID。 當我取消注釋mysqli_query($con, $sql); 在這種情況下,不會回顯循環中的任何內容,但是它確實可以保存數據庫。

例如:假設此while語句循環遍歷,並發現3次迭代的迭代通知等於0(UniqueID的29、26、25),而對mysqli_query進行注釋時,它將在頁面上很好地顯示這些數字。 但是,一旦我取消注釋,數據庫將保存,但不會在頁面上顯示任何其他while循環。

我非常需要這樣做,因為我計划在播放循環的同時發送桌面通知。

跟進:它也不顯示echo "test<br><br>"; 取消查詢時在頁面上的任何一個。

另一后續操作:查詢正在按原樣保存所有數據。 問題不在於IF語句正在顯示的tcheckNotifs內部(回聲等),就像它們沒有在執行一樣。 幾乎就像while語句的結尾在其他任何東西之前執行一樣,包括while語句之前的“ test”回顯。

有人可以幫我弄清楚為什么這沒有按預期進行嗎?

這是我當前的所有代碼,其中還添加了一些建議,但仍然無法正常工作。 while語句將保存查詢,但是頁面上不會顯示其他輸出。

$configs = include("config.php");
$con = mysqli_connect($configs['SQL-Host'], $configs['SQL-User'], $configs['SQL-Pass'], $configs['SQL-Database']) or die("Error " . mysqli_error($con));

if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }

        $alertAdmin = mysqli_query($con, "SELECT * FROM tickets WHERE notified='0'");
        $tcheckNotifs = mysqli_num_rows($alertAdmin);

        if($tcheckNotifs > 0) {
            echo "test<br><br>";
            flush(); ob_flush();
            while($row = mysqli_fetch_array($alertAdmin))
                {
                    $Unique = $row['UniqueID'];
                    echo $Unique.' ';
                    updateTickets($con, $Unique);
                }
            echo "test<br><br>";
        }

        function updateTickets($con, $id){
    $sql = "UPDATE tickets SET notified=1 WHERE UniqueID=$id";
    mysqli_query($con, $sql);
}

最后更新亞歷克斯·安德烈Alex Andrei)的幫助下,我們移至PDO

$dsn = 'mysql:dbname=domains;host=localhost';
$user = 'root';
$password = '';

try {
    $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$st = $db->prepare('SELECT UniqueID FROM tickets WHERE notified=0');
$st->execute();

$result = $st->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $d){
    echo $d['UniqueID'] . "<br/>";
    $id = $d['UniqueID'];
    $st = $db->prepare("UPDATE tickets SET notified=1 WHERE UniqueID=$id");
    $st->execute();
}

第二次更新

嘗試將查詢放入變量中,然后像這樣運行循環...

while($row = mysqli_fetch_array($alertAdmin))
    {
        $Unique = $row['UniqueID'];
        echo $Unique.' ';
        $sql = "UPDATE tickets SET notified=1 WHERE UniqueID=$Unique";
        $update = mysqli_query($con, $sql);
    }

更新

查詢有可能像您所說的那樣先運行。 也許您可以創建一個獨立的函數來運行查詢並從while循環內部調用該函數。

function updateTickets($con, $id){
    $sql = "UPDATE tickets SET notified=1 WHERE UniqueID=$id";
    mysqli_query($con, $sql);
}

你的循環看起來像這樣...

while($row = mysqli_fetch_array($alertAdmin))
    {
        $Unique = $row['UniqueID'];
        echo $Unique.' ';
        updateTickets($con, $Unique);
    }

原始答案

我會這樣修改您的查詢...

$sql = "UPDATE tickets SET notified=1 WHERE UniqueID=$Unique";

您不需要在這里所有的反勾號或單引號。 可能引起問題。

另外,我假設1是一個整數,所以不需要引用它。

解決方法:課程的PDO!

    $configs = include("config.php");

    $dsn = 'mysql:dbname='.$configs['SQL-Database'].';host='.$configs['SQL-Host'].''; 
    $user = $configs['SQL-User']; 
    $password = $configs['SQL-Pass']; 

    try { 
    $db = new PDO($dsn, $user, $password); 
    } catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
    } 

    $st = $db->prepare('SELECT UniqueID FROM tickets WHERE notified=0'); 
    $st->execute(); 

    $result = $st->fetchAll(PDO::FETCH_ASSOC); 

    foreach($result as $d){ 
    echo $d['UniqueID'] . "<br/>"; 
    $id = $d['UniqueID']; 
    $st = $db->prepare("UPDATE tickets SET notified=1 WHERE UniqueID=$id"); 
    $st->execute(); 
    }

$ sql =“ UPDATE票證已notified =' UniqueID ='$ Unique'”;

我認為這是錯誤。 您不能在單引號之間使用$Unique (盡管您已經在雙引號之間)。

嘗試解決此問題,並替換為:

$sql = "UPDATE tickets SET `notified`='1' WHERE `UniqueID`=$Unique";

首先,在查詢中,您要在以下位置傳遞字符串: ...WHERE "UniqueID"="$Unique"因為您的php變量周圍帶有引號。 因此,您的查詢如下所示: WHERE UniqueID = "10" 沒什么大不了的,但是一般來說,如果您查找數字,則應該刪除引號。

而且我懷疑是某種原因導致循環中的查詢失敗,因此請添加一些內容以檢查錯誤:

if(!$queryResult){
   echo $con->error;
}

運行循環,看看是否有導致查詢錯誤的原因。 但是,實際上,您應該擺脫查詢中存在的大多數問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM