我正在使用DBLIB驱动程序从Linux工作站连接到MS SQL Server 2008数据库。
由于DBLIB不支持PDO :: lastInsertId()方法,我使用SELECT SCOPE_IDENTITY()来获取最后插入的id,但我的代码无效。
我们来看看我的代码:
function setDataByQuery($query, $values){
$sth = $this->dbLink->prepare($query);
$this->bindParams($sth, $values);
$sth->execute();
var_dump($sth->fetchAll(PDO::FETCH_ASSOC));
//$this->lastId = $this->dbLink->lastInsertId();
return true;
}
private function bindParams(&$sth, $values){
$type = array('i'=>PDO::PARAM_INT, 's'=>PDO::PARAM_STR);
foreach($values as $key=>$value)
$sth->bindParam($key, $value['data'], $type[$value['type']]);
}
我的方法setDataByQuery插入没有问题但是当我尝试获取最后一个插入的id时,我得到一个空数组。
我的插入查询如下所示:
"INSERT INTO personas (nombres, apellido_paterno, apellido_materno, fecha_nacimiento, sexo, estado_civil, direccion, codigo_postal, id_delegacion, id_empresa)
VALUES (:n,:aP,:aM,'1900-1-1','H','Unión Libre','Dirección','0000',1,1);SELECT SCOPE_IDENTITY() AS theID;";
根据this问题,应该没有问题,但不同之处在于我正在使用准备好的查询,这可能会导致问题。你能帮帮我吗?
答案 0 :(得分:0)
由于某种原因,当两个语句在同一个查询中,所以我创建了另一个完成这项工作的函数时,这不起作用。
function setDataByQuery($query, $values){
$sth = $this->dbLink->prepare($query);
$this->bindParams($sth, $values);
if(!$sth->execute())
return false;
$this->lastId = $this->lastInsertId();
//$this->lastId = $this->dbLink->lastInsertId();
return true;
}
private function lastInsertId($seqname = null){
$sth = $this->dbLink->prepare('SELECT SCOPE_IDENTITY() AS id');
$sth->execute();
$result = $sth->fetch();
return $result['id'];
}