2013-08-24 75 views
0

這是簡單的事情,但由於某種原因,我很困難。 基本上,我做了一個選擇語句來查找結果。我遍歷該結果並更新結果中找到的項目。PDO在循環中準備凳子

這是我的代碼:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$stmt = $pdo->prepare("select * from licenses where email='empty' limit $quantity"); 
$stmt->execute(); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 


if ($stmt->rowCount() > 0) 
{ 
    $stmt = $pdo->prepare("update licenses set email=:em, exp_date=:exp where 'id'=:id"); 

    foreach ($row as $row) 
    { 
     $expires = date("Y-m-d", strtotime('+365 days')); 
     $license = $row['license_key']; 
     $lid = $row['id']; 

     echo $license . '<br> ID:' . $lid; 

     $stmt->bindValue(':em', $email1, PDO::PARAM_STR); 
     $stmt->bindValue(':exp', $expires, PDO::PARAM_STR); 
     $stmt->bindValue(':id', $lid, PDO::PARAM_INT); 

     $stmt->execute(); 
    } 

此代碼的工作,它更新我的數據庫處於工作狀態。但是,該網站返回504錯誤,許可證的輸出不會顯示。有人知道這段代碼有什麼問題,或者我該如何完成我想要完成的任務?

**編輯:當我使用提琴手時,出現此錯誤: [Fiddler] ReadResponse()失敗:服務器未返回此請求的響應。

+1

:圍繞id刪除引號某些驅動程序需要執行下一statement.' http://www.php.net/manual/en/pdostatement.execute.php之前關閉遊標。你使用什麼驅動程序? –

+0

我甚至在做第二次準備之前嘗試關閉光標。沒有運氣。 – JonJon2244

回答

3

好了,我不能相信大家都錯過了這一個。在更新查詢中,您在where子句中使用表達式'id'=:id。這實際上意味着如果您的$ id是15 - >'id'!= 15並且查詢將永遠不會更新表中的任何值。從PHP手冊`注意

$stmt = $pdo->prepare("update licenses 
      set email=:em, exp_date=:exp where id=:id"); 
+0

偉大的觀察!這實際上是導致錯誤的原因之一。我在測試時已經指出了一個。 錯誤發生的另一個原因是因爲:array(PDO :: ATTR_PERSISTENT => true));我不得不刪除它,它再次工作。 – JonJon2244

3

變化的變量名$row$rows

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // change variable $row to $rows 
foreach ($rows as $row) { 
    // Your Code 
} 
+0

嘗試過,結果相同。 – JonJon2244