将mysql_insert_id和mysqli_multi_query转换为Postgresql

时间:2016-12-05 21:00:36

标签: mysql postgresql

我在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>';
            }
        }

1 个答案:

答案 0 :(得分:0)

切换到PDO

从您正在关注的教程中疯狂奔跑。它要么是多年前写的,要么是由对这个主题不了解的人写的。这是一个可怕的教程。这就是原因:

           $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上工作

上次插入ID

使用PDO获取last insert id非常简单。

$db->lastInsertId('sequence_name');

其中sequence_name是postgresql中串行列的序列名称。 (Serial是auto_increment的等价物)