2016-09-29 4 views
-1

これは私のコードですか? PDOは常に最後に挿入されたidを0として返します、私はすべてを試みました!PDOはゼロ(0)としてlastInsertId()を返します、わかりませんでしたか?

$this->db()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$sql = "INSERT INTO inbox (sender,recever) VALUES ('1','2')"; 
$this->db()->exec($sql);   
$project_id =$this->db()->lastInsertId(); 

sqlコード表:

CREATE TABLE inbox(
id int(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
sender int, 
recever int 
); 
+1

'exec'は成功しましたか?その行は正常に追加されましたか? – tadman

+0

はい行は正常に追加されましたが、ゼロを返します。コミットとトランザクションを試してみます。実行またはexecを準備しますが、ゼロだけを返します。0、 –

+0

接続プールを使用している可能性はありますか? 'lastInsertId別の接続で? – tadman

答えて

-1

この

//set persistent connection 
$con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->use‌​r,$this->pass,array(‌​PDO::ATTR_PERSISTENT => TRUE));  
$stmt = $con->prepare("INSERT INTO inbox (sender,recever) VALUES ('1','2')"); 
$stmt->execute(); 
$id = $db->lastInsertId(); 
+1

より多くの制御があるため、準備されたステートメントを使用する方が良いですが、 – tadman

+0

ええ私は同じことをしようとしているが、私はリンクと挿入を呼び出すためにjquery ajaxを使うが、接続が別のケースで開いている可能性は分かっていない。 –

+0

永続的なPDO接続を試してください:PDO :: ATTR_PERSISTENT => TRUE – 3y3skill3r

-1

問題は、新しい接続が呼び出されるたびに作成し、あなたのdb()方法で試してみてください。

このような方法の代わりに、プロパティを使用します。 PDOインスタンスを$this->dbプロパティに割り当て、PDO接続が必要な場合はいつでも使用してください。

現在の実装はひどいものですが、他の回答で提供されている回避策は動作することが保証されていません。それを最初に使用してはいけません。