Так что я спагетти PHP приложением, которое я уверен, преобразование в использование класса базы данных ООП/MVC макетаПолучить автогенерируемую идентификатор из Oracle после вставки с использованием класса PHP DB
Раньше на форме, было SQL заявлением запущенным на должность, которая принесла бы вставленный ID в переменную связывания (на основе SO Get the auto-generated ID after an insert
$sql ="insert into table (name, type) values (:name, :type) returning id into :id";
$squery = oci_parse($link, $sql);
oci_bind_by_name($squery,":name", $_POST['name']);
oci_bind_by_name($squery,":type", $_POST['type']);
oci_bind_by_name($squery,":id", $id,-1, SQLT_INT);
oci_execute($squery);
в этой точке, $ идентификатор может быть использован в качестве переменной был присвоен вставленный идентификатор
Итак, моя проблема, моя модель передает значения за м $ _POST к классу базы данных, но никогда не присваивает переменной
Model
function create(){
$sql ="insert into table (name, type) values (:name, :type) returning id into :id";
$this->db->execute($sql, "table insert",
array(
array(":name", $_POST['name'], -1, SQLT_CHR),
array(":type", $_POST['type'], -1, SQLT_CHR),
array(":id", $id,-1, SQLT_INT)
)
);
return $id;
}
базы данных класса (на основе http://docs.oracle.com/cd/E17781_01/appdev.112/e18555/ch_three_db_access_class.htm)
public function execute($sql, $action, $bindvars = array()) {
$this->stid = oci_parse($this->conn, $sql);
if ($this->prefetch >= 0) {
oci_set_prefetch($this->stid, $this->prefetch);
}
foreach ($bindvars as $bv) {
// oci_bind_by_name(resource, bv_name, php_variable, length , type)
oci_bind_by_name($this->stid, $bv[0], $bv[1], $bv[2], $bv[3]);
}
oci_set_action($this->conn, $action);
oci_execute($this->stid); // will auto commit
}
Класс является правильным, то есть он будет выполнять отлично , он просто не вернет последний вставленный идентификатор.