我在mysql中找到了一个练习,我将它传递给postgresql,但是我得到了一个“mysql_insert_id”的部分,我明白这是获取最后一条记录,还发现了“mysqli_multi_query”我不知道如何将其更改为Postgresql。
<?php
if(isset($_POST["place_order"]))
{
$insert_order = "
INSERT INTO tbl_order(customer_id, creation_date, order_status)
VALUES('1', '".date('Y-m-d')."', 'pending')
";
$order_id = "";
if(pg_query($connect, $insert_order))
{
$order_id = mysql_insert_id($connect);
}
$_SESSION["order_id"] = $order_id;
$order_details = "";
foreach($_SESSION["shopping_cart"] as $keys => $values)
{
$order_details .= "
INSERT INTO tbl_order_details(order_id, product_name, product_price, product_quantity)
VALUES('".$order_id."', '".$values["product_name"]."', '".$values["product_price"]."', '".$values["product_quantity"]."');
";
}
if(mysqli_multi_query($connect, $order_details))
{
unset($_SESSION["shopping_cart"]);
echo '<script>alert("You have successfully place an order...Thank you")</script>';
echo '<script>window.location.href="cart.php"</script>';
}
}
答案 0 :(得分:0)
从您正在关注的教程中疯狂奔跑。它要么是多年前写的,要么是由对这个主题不了解的人写的。这是一个可怕的教程。这就是原因:
$order_details .= "
INSERT INTO tbl_order_details(order_id, product_name, product_price, product_quantity)
VALUES('".$order_id."', '".$values["product_name"]."', '".$values["product_price"]."', '".$values["product_quantity"]."');
";
使用字符串连接生成查询,这是一种非常不安全的做法。首选和安全的方法是使用预准备的陈述。其次,你最好不要使用PDO而不是mysqli,因为PDO适用于mysql和PostgreSQL。第三,几乎没有使用过mysqli_mutli_query。
$stmt = $db->prepare("INSERT INTO tbl_order_details(order_id,product_name, product_price, price_quantity) VALUES(:order_id, :product_name, :product_price, :price_quantity)";
foreach($_SESSION["shopping_cart"] as $keys => $values)
{
$stmt->bindParam('order_id'], $order_id);
$stmt->bindParam('product_name', $values['product_name']);
$stmt->bindParam('product_price',$values['product_price']);
$stmt->bindParam('product_quantity'], $values['product_quantity']);
$stmt->execute()
}
上面做的更安全,更重要的是在postgresql和mysql上工作
使用PDO获取last insert id非常简单。
$db->lastInsertId('sequence_name');
其中sequence_name是postgresql中串行列的序列名称。 (Serial是auto_increment的等价物)