[英]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.