Linux ワークステーションから MS SQL Server 2008 データベースに接続するために DBLIB ドライバーを使用しています。
DBLIB は PDO::lastInsertId() メソッドをサポートしていないため、最後に挿入された ID を取得するために SELECT SCOPE_IDENTITY() を使用していますが、コードが機能していません。
私のコードを見てみましょう:
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;";
この質問によると、問題はないはずですが、違いは、準備されたクエリを使用しているため、問題が発生する可能性があることです。助けてください。