2010-08-20 10 views
0

顧名思義,下面的函數將註冊表單中的數據註冊/記錄到數據庫中。爲了避免表地址得到錯誤的adressID(它引用成員(memberID)),我必須用autocommit和commit分別將兩個插入查詢包裝到成員和地址中。mysqli_commit不工作?

function register($un, $fname, $lname, $email, $pwd, $phone, $street, $city, $country, $postal, $state) 
    { 
     $this->conn->autocommit(FALSE); 

     $query_insert_members = "INSERT INTO members(fname, lname, uname, email, phone, password, joinDate) VALUES('".$fname."', '".  
           $lname."', '".$un."', '".$email."', '".$phone."', '".md5($pwd)."', NOW())"; 

     $registerquery_members = $this->conn->query($query_insert_members); 

     $last_id = $this->conn->insert_id; 

     $query_insert_addresses = "INSERT INTO addresses(addressID, street, city, state, country, zip) VALUES('".$last_id."', '". 
          $street."', '".$city."', '".$state."', '".$country."', '".$postal."')"; 

     $registerquery_addresses = $this->conn->query($query_insert_addresses); 

     if($this->conn->commit) 
     { 
      return true; 
     } 
     else 
     { 
      $affectd_rows = $this->conn->num_rows; 
      return $affectd_rows.$this->conn->error; 
      $this->conn->rollback(); 
     } 
    } 

它似乎沒有提交任何內容,也不返回任何錯誤消息。我只收到一條空白消息。

回答

1

您可以訪問屬性「commit」,而不是調用函數「commit()」。

你沒有得到任何錯誤的原因是因爲if語句中的$ this-> conn-> commit將有效地檢查賦值屬性是否存在於$ this-> conn對象中,其值爲false。然後,執行else分支,您只需返回與錯誤字符串連接的受影響的行,這些字符串當然不會失敗。返回後調用回滾將永遠不會執行順便說一句。