2012-02-20 128 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的赋值。