我正在尝试在我的Orders表中获取最后一个插入的标识,以便为我的购物车数组中的每个项目将相同的ID插入到链接的OrderItems表中。我的订单表“orderID”是我的标识变量,但是当我尝试提取最近插入的值时,结果为“null”。对Orders表的原始INSERT查询是成功的,但由于某种原因,“SELECT @@ IDENTITY”查询不是。
PHP代码
$ordersquery= "INSERT INTO Orders (customerID, orderDate, OrderOrigin) VALUES ('{$phonenumber}', '{$time}', 'online')";
echo $ordersquery."\n";
$result= mssql_query($ordersquery, $db);
var_dump($result);
echo mssql_get_last_message();
$idquery= "SELECT @@IDENTITY as id";
$result= mssql_query($idquery, $db);
$id= mssql_fetch_array($result)[$id];
var_dump($id);
foreach ($cart as $item) {
$itemID= $item['id'];
$quantity= $item['quantity'];
$orderitemsquery= "INSERT INTO OrderItems VALUES ('{$id}' '{$itemID}', '{$quantity}')";
if ($resultitems= mssql_query($orderitemsquery, $db)){
echo $orderitemsquery;
}
}
结果
INSERT INTO Orders (customerID, orderDate, OrderOrigin) VALUES ('(433) 943-4334', '2015-05-10 14:46:40', 'online')
boolean true
The statement has been terminated.
null
boolean false
答案 0 :(得分:0)
$query = "INSERT INTO Orders (customerID, orderDate, OrderOrigin) VALUES (?,?,?); SELECT SCOPE_IDENTITY()";
$resource=sqlsrv_query($conn, $query, $arrParams);
sqlsrv_next_result($resource); //note this line!!
sqlsrv_fetch($resource);
echo sqlsrv_get_field($resource, 0);
或 - 如果您愿意" mssql _"扩展功能:
$sql = "INSERT INTO Orders (customerID, orderDate, OrderOrigin) VALUES (?,?,?); SELECT SCOPE_IDENTITY()";
$results = mssql_fetch_assoc(mssql_query($sql));
$lastid=$results[0];
SCOPE_IDENTITY
通常更好,因为@@IDENTITY
跨越范围 - 它是当前会话中插入到任何表格中的最后一个标识,因此您最好小心@@IDENTITY
- 你可以通过触发器或其他东西获得一个值。
答案 1 :(得分:0)
Oracle没有自动增量。你能做的最好的事情就是首先得到id,然后做插入。你得到这样的id:
$statement = oci_parse(OCI_CONN, "Select my_seq.nextval from dual");
if (oci_execute($statement)) {
$row = oci_fetch_assoc($statement);
$id = $row['NEXTVAL'];
}