2017-11-28 4 views
0

PDO로 일부 CRUD를 수행하는 컨트롤러를 작성하려고하는데 아무 일도 일어나지 않고이 문제가 발생하지 않습니다. 나는 올바르게 묶는 중이라고 확신하지만, 덤핑 후에는이 문제가 보이지 않고 테이블이 업데이트되지 않는다.PDO 업데이트 문제

누군가 좀 봐 주시겠습니까?.

public function update($query, $array) 
{ 
    try 
    { 
     $stm = $this->conn->prepare($query); 

     foreach($array AS $key=>$value) 
     { 
      if(gettype($value) == "integer") 
      { 
       $stm->bindParam($key,$value,PDO::PARAM_INT); 
      } 
      if(gettype($value) == "string") 
      { 
       $stm->bindParam($key,$value,PDO::PARAM_STR); 
      } 

     } 
     $stm->execute(); 

     return ($stm->rowCount()<=0) ? FALSE : $stm->rowCount(); 
    } 
    catch(Exception $e) 
    { 
     echo 'Error with the query on line: ' . __LINE__ . ' in file: ' . __FILE__; 
    }  
} 

$test = new SQL('127.0.0.1', 'test', '*************', 'mike_test'); 
$pull = $test->update('UPDATE names SET name=:name WHERE id=:id;',[':name'=>'James',':id'=>2]); 

답변

0

문제는 변수에 결합 bindParam()를 사용하는 것입니다, 당신은 같은 변수 ($value)에 각 매개 변수를 결합하기 때문에, 당신은 기본적으로 모든 매개 변수의 마지막 값을 사용합니다.

해결책 : bindValue()을 사용하십시오.

이 문제는 볼 수 없으며 테이블이 업데이트되지 않습니다.

그러면 ID 값이 테스트 시스템에서 업데이트 되었기 때문에 표의 값과 일치하지 않습니다.

0

방금 ​​코드가 너무 부풀어졌습니다. 그러나 작성하는 코드가 많을수록 더 많은 오류가 나타납니다. 따라서이 기능을이 방법으로 설정하십시오.

public function update($query, $array) 
{ 
    $stm = $this->conn->prepare($query); 
    $stm->execute($array); 
    return $stm->rowCount(); 
}