2013-05-16 41 views
0

PHP 5.4.7在xampp安裝中,MySQL 5.5.27 - 我一整天都在努力爭取各種UPDATE語句的工作,都無濟於事。已經通讀並嘗試了http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers的示例,並放棄了一次UPDATE(找到了一個替代解決方案),但我堅持不知道下面的這一個錯在哪兒。順便說一句我的所有其他PDO使用fetchall查詢做工精細...PDO準備bindParam不起作用

function updateThisMemberInterests($PDOdbObject, $memberId, $interests) 
{ 
try 
{ 
    $intId = 0; 
    $upInt = $connectionObject->prepare("UPDATE `member_interest` SET (`interest_id`) VALUES (:intId)"); 
    $upInt->bindParam(':intId', $intId, PDO::PARAM_INT); 
    foreach($interests as $intId) 
    { 
     $upInt->execute(); 
    } 
    $affected_rows = $upInt->rowCount(); 
    return $affected_rows; 
} 
catch (PDOException $e) 
{ 
    echo "There was a problem connecting to this database."; 
    $e->getMessage(); 
} 
} 

我的數據庫設置函數指定: PDO :: ATTR_EMULATE_PREPARES =>假, PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION

但我沒有收到任何東西,除了我在Catch中回覆的消息。

必須錯誤地解​​釋教程的說明 - 有人可以告訴我它是什麼嗎?

+0

我敢肯定,'rowCount時()'只適用於最新的'的execute()',所以調用它後你的循環不會給你糾正信息。 –

+2

無論如何,你的問題是你的函數接受'$ PDOdbObject',但你在函數體中調用'$ connectionObject'。打開'error_reporting'和'display_errors',你會在非object_上看到_call成員函數prepare()。 –

+0

關於rowCount() - 注意,謝謝。大約$ PDOdbObject,這是它在我的數據層文件中的名稱。在我多次嘗試弄清楚發生了什麼後,我將整個函數移到了調用文件中 - 所以我的錯誤是,我將該函數與調用var名稱一起發佈。實際上,它們都是數據層文件中的$ PDOdbObject。所以這不是...... – swissphp

回答

1

好的 - 由於錯誤處理被打開,我發現了幾個問題,特別是我混合了INSERT和UPDATE語法。最後,我解決了一個交易的問題,該交易刪除了現有的興趣並插入新的興趣。這很好。

這裏是我的代碼:

function updateThisMemberInterests($PDOdbObject, $memberId, $interests) 
{ 
if ($interests != 0) 
{ 
    try 
    { 
     //begin transaction 
     $PDOdbObject->beginTransaction(); 

     $delInts = "DELETE FROM `member_interest` WHERE `member_id` = $memberId"; 
     $PDOdbObject->exec($delInts); 

     $intId = 0; 
     $upInt = $PDOdbObject->prepare( "INSERT INTO member_interest (`member_id`,`interest_id`) VALUES ($memberId, :interest_id)"); 
     $upInt->bindParam(':interest_id', $intId, PDO::PARAM_INT); 
     foreach($interests as $intId) 
     { 
      $upInt->execute(); 
     } 
     //commit 
     $PDOdbObject->commit(); 
     $affected_rows = $upInt->rowCount(); 
     return $affected_rows; 
    } 
    catch (PDOException $e) 
    { 
     echo "There was a problem - rolling back this transaction."; 
     //rollback transaction 
     $PDOdbObject->rollBack(); 
     echo $e->getMessage(); 
    } 
}//more than zero interests changed 
}