Php 为什么PDO::lastInsertId返回0?

Php 为什么PDO::lastInsertId返回0?,php,mysql,pdo,lastinsertid,Php,Mysql,Pdo,Lastinsertid,这是我的密码 // 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

这是我的密码

// 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

但是,如果插入查询成功,则会创建数据库记录,并且两个errorInfo输出都不会出错。

请从查询中删除分号或分号后的空格或两者:

$sql = "
INSERT INTO `wallet` (`uid`, `created_at`, `amount`, `type`, `payment_id`) VALUES (:uid, CURRENT_TIMESTAMP, :amount, 'payment', :payment_id)
";

表中是否有自动增量字段?lastInsertId在表中存在自动增量字段时起作用,而且查询中不需要该分号。。。这绝对不是必需的,我甚至可能使查询失败。你确定成功了吗?你成功了,谢谢。如果你能把它作为一个答案,这样我就可以投票并接受。我相信我成功了,但谢谢你指出这一点,我会删除的it@prodigitalson:请添加您的评论作为答案,以便接受。