2011-07-02 14 views
1

これは私のコードです。なぜPDO :: lastInsertIdは0を返しますか?

// insert reward into wallet 
$sql = " 
INSERT INTO `wallet` (`uid`, `created_at`, `amount`, `type`, `payment_id`) VALUES (:uid, CURRENT_TIMESTAMP, :amount, 'payment', :payment_id); 
"; 
$sth = self::link()->prepare($sql); 
// primary key makes sure payment does not get double rewarded 
$sth->execute(
    array(
    ':uid' => $referer, 
    ':amount' => $reward, 
    ':payment_id' => $payment_data['payment_id'], 
    ) 
); 
var_dump(self::link()->errorInfo()); 
self::log("issuing subscription",self::LOG_LEVEL_DEBUG); 
// extend referers subscription 
$tid = self::link()->lastInsertId(); 
var_dump(self::link()->errorInfo()); 
self::log("using $tid as id for wallet transfer",self::LOG_LEVEL_DEBUG); 

私のログは言う:

[2011-07-02 20:31:44] using 0 as id for wallet transfer 

INSERTクエリが成功したしかし、データベースレコードが作成され、両方のerrorInfo出力がエラーを与えていません。

+7

は、テーブル内の任意のAUTO_INCREMENTフィールドのですか? lastInsertIdは、テーブルにauto_incrementフィールドが存在する場合にも機能します –

+2

また、セミコロンを必要としません...その必須ではありません。成功したと確信していますか? – prodigitalson

+2

あなたはそれを釘付け、ありがとう。あなたが答えとして投稿することができれば私はupvoteと受け入れることができます。 –

答えて

1

クエリからセミコロンまたは両方の後にセミコロンまたは空白文字を削除します。

$sql = " 
INSERT INTO `wallet` (`uid`, `created_at`, `amount`, `type`, `payment_id`) VALUES (:uid, CURRENT_TIMESTAMP, :amount, 'payment', :payment_id) 
"; 
関連する問題