使用PDO获取lastInsertId

时间:2014-05-08 16:45:54

标签: php mysql pdo

我无法在php

中使用PDO获取lastInserId
$conn = new Db();
$query = "INSERT INTO orders SET
    order_timestamp= :orderTimestamp ,
    customer_id= :customerId";                      
$stmt = $conn->dbConnect()->prepare($query);
$stmt->bindParam(':orderTimestamp', date("Y-m-d H:i:s"), PDO::PARAM_STR);
$stmt->bindParam(':customerId', $_SESSION["customerId"], PDO::PARAM_INT);
$stmt->execute();
$orderId = $conn->lastInsertId();
return $orderId;

以下是用于数据库连接的代码

public function dbConnect(){
try {
        $conn = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME, DBUSER, DBPASSWORD);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } 
    catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }   
    return $conn;
}

我收到如下所述的错误。

  

严格标准:只应通过引用传递变量   H:\ xampp \ htdocs \ php \ tuf4 \ hunger \ includes \ classes \ class.hunger.php on   第31行

     

致命错误:调用未定义的方法Db :: lastInsertId()in   H:\ xampp \ htdocs \ php \ tuf4 \ hunger \ includes \ classes \ class.hunger.php on   第34行

1 个答案:

答案 0 :(得分:3)

bindParam期望变量通过引用传递。 date("Y-m-d H:i:s")显然不是变量;)

请尝试bindValue

使用正确的功能将停止错误的多米诺骨牌效应,并允许您获得正在寻找的lastInsertId

编辑:进一步审核时,您尝试在lastInsertId对象上的Db包装器类 not 上调用PDO。尝试:

$pdo = $conn->dbConnect();
$stmt = $pdo->prepare($query);
// ...
$orderId = $pdo->lastInsertId();