PDO lastInsertId()返回0

时间:2013-04-17 08:53:03

标签: php pdo

我一直在寻找其他问题同样的问题,并且无法弄清楚为什么我的查询不会像它应该的那样。

我的查询:

$stmt = db()->prepare("INSERT INTO conversations (user1, user2) VALUES (?, ?)");
$stmt->execute(array($_SESSION['user']['userId'], $user));
echo db()->lastInsertId();

当我这样做时,lastInsertId();不断返回0。

我的db()函数:

function db()
{
    $dsn = 'mysql:host=localhost;dbname=message_board';
    $username = 'root';
    $password = 'root';

    try {
        $db = new PDO($dsn, $username, $password);
    } catch(PDOException $e) {
        // exceptions handles here
    }
    return $db;
}

2 个答案:

答案 0 :(得分:5)

function db()
{
    static $db;

    $dsn = 'mysql:host=localhost;dbname=message_board';
    $username = 'root';
    $password = 'root';

    if (!$db) {
       $db = new PDO($dsn, $username, $password);
    }
    return $db;
}

答案 1 :(得分:1)

您正在每行创建一个新的数据库连接。

尝试:

$db = db();
$stmt = $db->prepare("INSERT INTO conversations (user1, user2) VALUES (?, ?)");
$stmt->execute(array($_SESSION['user']['userId'], $user));
echo $db->lastInsertId();