2012-02-20 3 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 Injection] (http://en.wikipedia.org/wiki/SQL_injection)에 취약합니다. – lightster

+0

이 단계는이 클래스 외부에서 수행됩니다. :) –

답변

2

이의 경우/다른 이전 $this->charID = $this->db->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

"1 '을 반환하는 바로 직전으로 줄을 이동했습니다. 당신의 도움을 주셔서 감사합니다 –

0

아래를 시도해보십시오. 제대로

인용 값 : 모두 insert_id 라인에 도착하기 전에 반환하기 때문에

$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에 문제가 있습니다 –

+0

$ this-> charID = $ this-> db-> insert_id();를 사용해보십시오. –

+0

나는 이것을 시도했다. 쿼리가 이미 작동했지만 insert_id와 아무런 차이가 없습니다. –

2

return 문으로 인해 insert_id를 할당 할 수 없어서 반환되기 전에 파트에 넣으려고합니다.