INSERT INTO не заполняет все строки - PullRequest
0 голосов
/ 01 мая 2019

У меня проблема с моим кодом, это экспресс-интеграция PayPal. Я имею в виду, что в исходном состоянии после некоторой настройки, чтобы соответствовать моей базе данных и так далее, она работает, она заполняет строки с помощью ex. payerID и так далее.

В моей базе данных есть 2 таблицы - во-первых, это Продукты, в которых есть 5 строк, например productID, Price, валюта и т. Д., Но мне нужна 1 дополнительная строка - скажем, мы называем ее 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;
        }

    }

Я не могу понять.

1 Ответ

0 голосов
/ 01 мая 2019

Это довольно частый вопрос, поэтому он заслуживает ответа, каким бы очевидным он ни казался.

Если у вас есть рабочий INSERT-запрос и один столбцовстановится NULL, это означает, что исходная переменная содержит NULL.

Таким образом, проблема не в PDO, не в готовых операторах и не в базе данных, а просто в исходной переменной $credits.Вы должны проверить свой код, связанный с этой переменной, и убедиться, что он содержит желаемое значение.

...