PDO lastInsertId() возвращает 0

Я смотрю на другие вопросы, задающие то же самое, и не могу понять, почему мой запрос не будет работать так, как должен.

Мой запрос:

$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 ответа

Решение
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;
}

Вы создаете новое соединение БД в каждой строке.

Пытаться:

$db = db();
$stmt = $db->prepare("INSERT INTO conversations (user1, user2) VALUES (?, ?)");
$stmt->execute(array($_SESSION['user']['userId'], $user));
echo $db->lastInsertId();
Другие вопросы по тегам