2013-08-24 6 views
0

이것은 단순한 것이지만 어떤 이유로 든 정말 힘든 시간을 보내고 있습니다. 기본적으로 select 문을 사용하여 결과를 찾습니다. 그 결과를 통해 반복하고 결과에서 찾은 항목을 업데이트합니다. 이 코드가 작동하는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

를 PHP 매뉴얼'주에서 : 일부 드라이버는 다음 statement.' http://www.php.net/manual/en/pdostatement.execute.php 실행하기 전에 커서를 닫습니다 필요합니다. 어떤 운전자를 사용합니까? –

+0

두 번째 준비를하기 전에 커서를 닫으려고했습니다. 행운도 없습니다. – JonJon2244

답변

3

음에, 나는 우리 모두가이 일을 놓친 생각하지 못할. 업데이트 쿼리에서 where 절에 표현식 'id'=:id을 사용합니다. 이것은 $ id가 15 -> 'id'! = 15라고 말하면 쿼리는 절대로 테이블의 값을 업데이트하지 않는다는 것을 의미합니다. id 주위에 따옴표를 제거 :

$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