2017-06-09 4 views
3

た後、私はこのようなSQLクラスを持っている:最後のIDを取得し、インサート(常に0を返す)

 class Sql extends PDO { 
      private $connection; 
      public function __construct() { 
       $this->connection = new PDO("mysql:host=localhost;dbname=myDB", "root", "root"); 
      } 

(...) 

それから私は別のクラス「user.php」を使用して、私のDBにデータを挿入しようとしています。 "getConection"(SQLクラスメソッド)を使用します。このように:

class User { 
    private $iduser; 
    private $deslogin; 
    private $despassword; 
    private $datecad; 

    (getters & setters) 

public function insert() { //query & select are a SQL class method 
     $sql = new Sql(); 
     $sql->query("INSERT INTO tb_users (deslogin, despassword) VALUES (:LOGIN, :PASS))", array(
      ':LOGIN'=>$this->getDeslogin(), 
      ':PASS'=>$this->getDespassword() 
     )); 

      echo $sql->getConnection()->lastInsertId(); //getConnection is a Sql Class method that returns the private connection. 
    } 

なぜ私のエコーは常に0を返しますか?あなたが取得するINSERTクエリに関する同じ接続オブジェクト必要があるため

+0

は適切に実行されている挿入クエリですか? –

+0

あなたはどのフレームワークを使用していますか? – Prasad

+0

はい。私の挿入はOKです。そして、いいえ、私はフレームワークを使用していません –

答えて

4

ITSは、最後のID を挿入していますが最後に挿入IDを取得するための新しい接続を作成しています。そのため、結果として常に0が得られます。

参照ください:あなたがあなたのコードを変更

1つの余分閉じ括弧があるマークがありますあなたのコードの参照から、あなたの insertでその問題を

http://php.net/manual/en/pdo.lastinsertid.php#120618

EDIT

を:

$sql->query("INSERT INTO tb_users (deslogin, despassword) VALUES (:LOGIN, :PASS)", array(
      ':LOGIN'=>$this->getDeslogin(), 
      ':PASS'=>$this->getDespassword() 
     )); //<------there must be only one bracket after::LOGIN, :PASS 
+0

ああ!光があります!ありがとう! しかし、この場合、接続を救済するにはどうすればよいですか?これはプライベート属性です。 –

+0

接続とクエリに関するすべてのコードを表示する必要があります –

+0

クラスSQL:https://anotepad.com/notes/a6wxn8 クラスUSER:https://anotepad.com/notes/45cbnw 変数名は翻訳されていますが、コードはokです。 –

関連する問題