PHP到SqlServer,获取最后插入的标识

时间:2015-05-10 18:58:54

标签: php arrays sql-server identity

我正在尝试在我的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

2 个答案:

答案 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'];
}