2012-02-20 61 views
0

有人可以看看這個,並告訴我爲什麼它不工作。這是我正在研究的課程的一部分。插入查詢工作正常,如果我調用$ char-> db-> insert_id;從類的外部它的工作($ char是類)mysqli insert_id不工作

function createChar($charName, $charRace, $charClass) { 
    //put userId, charName and charRace into database 
    $sql="insert into characters (userID, name, race, class) values ('$this->userID', '$charName', '$charRace', '$charClass') "; 
    $result=$this->db->query($sql); 
    if($this->db->affected_rows == '1') 
     { 
      return '1'; 
     } 
     else 
     { 
      return '0'; 
     } 

    //get last insert id  
    $this->charID=$this->db->insert_id; 

} 
+0

雖然與您的問題無關,但我強烈建議使用mysqli的[real_escape_string](http://php.net/manual/en/mysqli.real-escape-string.php)引用所有變量進入查詢。目前你的代碼容易受到[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)的影響。 – lightster 2012-02-20 00:36:33

+0

這一步是在這門課之外完成的。 :) – 2012-02-20 00:41:26

回答

2

嘗試之前的if/else移動$this->charID = $this->db->insert_id;,因爲兩者會越來越向insert_id前行返回。

function createChar($charName, $charRace, $charClass) { 
    //put userId, charName and charRace into database 
    $sql = "insert into characters (userID, name, race, class) values ('$this->userID', '$charName', '$charRace', '$charClass') "; 
    $result = $this->db->query($sql); 

    //get last insert id  
    $this->charID = $this->db->insert_id; 

    if($this->db->affected_rows == '1') 
    { 
     return '1'; 
    } 
    else 
    { 
     return '0'; 
    } 
} 
+0

將行移動到「return」1「」之前,現在正確工作。謝謝你的幫助 – 2012-02-20 00:27:48

0

請嘗試下面。

報價值正常:

$sql="insert into characters (userID, name, race, class) values 
    ('".$this->userID."', '".$charName."', '".$charRace."','".$charClass."') "; 
    $result=$this->db->query($sql); 
    $this->charID=$this->db->insert_id; 
+0

插入查詢正在工作,這是insert_id我遇到了問題 – 2012-02-20 00:06:33

+0

嘗試$ this-> charID = $ this-> db-> insert_id(); – 2012-02-20 00:13:46

+0

我試過了。該查詢已經工作,但這對insert_id沒有任何影響。 – 2012-02-20 00:15:14

2

由於return語句試圖在返回發生之前嘗試將其放在零件上,所以無法達到insert_id的賦值。