INSERT INTO不会填满所有行

问题描述 投票:-2回答:1

我的代码有问题,它是PayPal express Integration。我的意思是在经过一些调整以匹配我的数据库之后的原始状态,所以它工作,它用ex填充行。 payerID等。

我在我的数据库中有2个表 - 首先是它有5行的产品,比如产品ID,价格,货币等等,但是我还需要1行 - 比方说我们称之为Credits。我手动将它添加到我的数据库,用数据填充表产品。

然后我有另一个名为Orders的表 - 我在其中添加了Row称为Credits,而不是在成功付款+结帐时匹配Credits到所选产品它应该在Orders表中填写此Row Credits。我得到的问题是Order Table填充了除最后一行之外的所有数据 - > Credits它总是在数据库中显示NULL。

这是我的代码的一部分:

    public function getAllProducts()
    {
        $db = getDB();
        $stmt = $db->prepare("SELECT * FROM products");
        $stmt->bindParam("pid", $pid, PDO::PARAM_INT) ;
        $stmt->execute();
        $data = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db=null;
        return $data;

    }

    public function getProduct($pid)
    {
        $db = getDB();
        $stmt = $db->prepare("SELECT * FROM products WHERE pid=:pid");
        $stmt->bindParam("pid", $pid, PDO::PARAM_INT) ;
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_OBJ);
        $db=null;
        return $data;

    }

这就是我遇到问题的地方

    public function orders()
    {
        $id = $_SESSION['session_id'];
        $db = getDB();
        $stmt = $db->prepare("SELECT P.product, P.price, P.product_img, P.currency, P.credits, O.created, O.oid  FROM orders O, products P WHERE O.id_fk=:id AND P.pid = O.pid_fk ORDER BY O.created DESC");
        $stmt->bindParam("id", $id, PDO::PARAM_INT) ;
        $stmt->execute();
        $data = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db=null;
        return $data;

    }

    public function updateOrder($pid, $payerID, $paymentID, $token, $credits)
    {
        $id = $_SESSION['session_id'];
        if($this->pyamentCheck($paymentID) < 1 && $id > 0){
        $db = getDB();

        $stmt = $db->prepare("INSERT INTO orders (id_fk, pid_fk, payerID, paymentID, token, created, credits) VALUES (:id, :pid, :payerID, :paymentID, :token, :created, :credits)");
        $stmt->bindParam("paymentID", $paymentID, PDO::PARAM_STR) ;
        $stmt->bindParam("payerID", $payerID, PDO::PARAM_STR) ;
        $stmt->bindParam("token", $token, PDO::PARAM_STR) ;
        $stmt->bindParam("pid", $pid, PDO::PARAM_INT) ;
        $stmt->bindParam("id", $id, PDO::PARAM_INT) ;
        $created = time();
        $stmt->bindParam("created", $created, PDO::PARAM_INT) ;
        $stmt->bindParam(":credits", $credits, PDO::PARAM_INT) ;

        $stmt->execute();
        $db=null;
        return true;

        }
        else{
            return false;
        }

    }

我无法理解。

php mysqli pdo prepared-statement
1个回答
0
投票

这是一个非常常见的问题,所以它应该得到一个答案,无论它看起来多么明显。

一旦你有一个工作INSERT查询,其中一列变成NULL,这意味着源变量包含NULL

所以问题既不是PDO,也不是预备语句,也不是数据库,而只是简单地使用源变量$credits。您必须检查与此变量相关的代码,并确保它包含所需的值。

© www.soinside.com 2019 - 2024. All rights reserved.