2013-04-17 115 views
0

我一直在寻找,在其他问题相同,并不能找出为什么我的查询不会像它应该。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; 
} 
+1

您正在每次调用一次新的'PDO'对象'分贝()'。只要检查它是否已经存在。 –

回答

4
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; 
} 
+0

啊,当然。有时候有多简单的事情。谢谢你的时间 :-) – skolind

1

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

尝试:

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