2012-02-20 16 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

は、IF /他の前に$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の割り当てに到達することはできません。

関連する問題