2011-05-15 68 views
1

我無法弄清楚這一點。這是我的變量:PDO聲明問題,當我使用bindParam時查詢不起作用

$id = 1; 
$exp = 1; 
$energy = 1; 
$payout = rand (100 , 300); 

這裏是查詢

$sql = 'update players set ' . 
      'exp = exp + :exp, ' . 
      'energy = energy - :energy, ' . 
      'cash = cash + :cash ' . 
      'where id = :id'; 

爲字符串這方面的一個例子是:

update players set exp = exp + 1, energy = energy - 1, cash = cash + 170 where id = '1' 

當我輸入這phpmyadmin它的工作原理。這就是爲什麼我不明白爲什麼這不起作用:

try 
    { 
     $stmt = $this->db->prepare($sql); 

     $stmt->bindParam(':id', $id, PDO::PARAM_INT); 
     $stmt->bindParam(':exp', $exp, PDO::PARAM_INT); 
     $stmt->bindParam(':energy', $energy, PDO::PARAM_INT); 
     $stmt->bindParam(':cash', $payout, PDO::PARAM_INT); 

     $result = $stmt->execute(); 

     $stmt->closeCursor(); 
    } 
    catch (Exception $e) 
    { 
     die ($e->getMessage()); 
    } 

    if (!$result) 
    { 
     trigger_error("mysql: " . $sql, E_USER_ERROR); 
     $data = array("message" => T_gettext("Something went wrong.")); 
     return json_encode($data); 
    } 

這將導致一個錯誤$result =有毛病查詢。

我做錯了什麼? +我如何從PDO獲得更詳細的mysql錯誤消息?

+2

重新錯誤信息,請嘗試[?拿捏錯誤消息出來的PDO(http://stackoverflow.com/q/3726505) – 2011-05-15 19:15:39

+0

此外,你不應該抓到Exception,而是PDOException類。 – 2011-05-15 19:25:35

回答

0

你是否真的從你的連接拋出異常以便你捕獲?試試這個,看看你得到任何錯誤消息:

$db = new PDO($connection_string); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);