Returns the ID of the last inserted row, or the last value from a sequence object, depending on the underlying driver. For example, PDO_PGSQL() requires you to specify the name of a sequence object for the name parameter
就是说对于pgsql必须指定sequence值,比如
$val = $dbh->lastInserId('table_id_seq');
如果不指定seq值则得不到正确值。解决办法是使用pgsql对'insert'扩展的语法
$sql= "insert into test1 (id, s) values (default, 'a') RETURNING *";
$sql2 = "insert into test1 (id, s) values (default, 'a'), (default, 'b') RETURNING * ";
$sql3 = "insert into test1 (s) values ('a'), ('b') RETURNING id ";
$stmt= $dbh->query($sql); // 注意是query而不是exec
// do错误检查
var_export($stmt->fetch(PDO::FETCH_ASSOC));
第一条sql返回的是整个插入行,第二条返回是最后插入的整行,第三条返回指定的字段
直接对PDOStatement结果进行迭代
一般情况我们对query出来的结果需要先fetchAll然后再迭代,比如
$sql = 'SELECT * FROM users';
$stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
// .. do err check
$res = $stmt->fetchAll();
if ($res) {
foreach ($res as $row ) {
// .. do something
$uid = $row['userid'];
}
}
PHP5的foreach可以对Object进行迭代处理,于是可以这样:
$sql = 'SELECT * FROM users';
$stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
// .. do err check
foreach ($stmt as $row ) { // 注意是$stmt 而不是 $stmt->fetchAll()
// .. do something
$uid = $row['userid'];
}