2017-11-28 19 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(); 
}