2012-09-07 94 views
1

我似乎無法獲得此代碼的工作。你可以使用foreach行來運行另一個查詢嗎?這是一個cron腳本,將發送電子郵件,當cron運行時我需要將狀態從'0'更新爲'1',因此我知道電子郵件已發送 - 代碼爲下面的UPDATE查詢不起作用。FOREACH和UPDATE mysql不能一起工作

// Connect to the database 
$conn = new PDO("mysql:host=$DB_HOST;dbname=$DB_DATABASE",$DB_USER,$DB_PASSWORD); 

// Get the emails to send and ensure the status shows they have not been sent already 
$stmt = $conn->prepare("SELECT id, userid, title, message FROM reminders WHERE time=CURDATE() AND status='0'"); 
$stmt->execute(); 
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 

foreach($results AS $row){ 
echo $row['title'] . ' ' . $row['message'] . ' ' . $row['id'] . '<br />'; 
$update = $conn->prepare("UPDATE results SET status='1' WHERE id=:id"); 
$update->bindParam(':id', $row['id']); 
$update->execute(); 
}; 

編輯:表名是錯的。解決

+1

這是否會拋出MySql錯誤或什麼? –

+0

它顯示正確的行,但不更新狀態列。沒有錯誤顯示 – cantaffordretail

+0

嘗試刪除從狀態='1'到狀態= 1.status的引號可能是一個int列我猜。 –

回答

4

如何有關指定值的數據類型(我認爲[不知道]默認的數據類型爲字符串,服務器將自動對其進行解析)?

您正在使用結果變量resuls,然後嘗試更新表results:答案格式 - PDO::PARAM_INT

$update->bindValue(':id', $row['id'], PDO::PARAM_INT); 

PDO Predefine Constants

2

也許你需要bindValue並指定數據類型:

$update = $conn->prepare("UPDATE results SET status=1 WHERE id=:id"); 
$update->bindValue(':id', $row['id'], PDO::PARAM_INT); 
$update->execute(); 
0

正好有在問題的正確解決方案。你想要更新的表是真的命名爲「結果」還是從變量的名稱中獲取了這些信息?

從查詢看起來好像你在工作表reminders