Почему PDO :: lastInsertId возвращает 0? - PullRequest
2 голосов
/ 02 июля 2011

Это мой код.

// 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 не дают ошибок.

1 Ответ

1 голос
/ 16 июля 2011

Удалите точку с запятой или пробел после точки с запятой или и то, и другое из вашего запроса:

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