У меня проблема с моим кодом, это экспресс-интеграция PayPal. Я имею в виду, что в исходном состоянии после некоторой настройки, чтобы она соответствовала моей базе данных, и так далее, она работает, она заполняет строки ex. идентификатор плательщика и так далее.
У меня есть в моей базе данных 2 таблицы: первая — это «Продукты», в ней 5 строк, таких как productID, «Цена», «валюта» и т. д., но мне нужна 1 дополнительная строка — скажем, мы назовем ее «Кредиты». Я вручную добавил его в свою базу данных, заполнил Table Products данными.
Затем у меня есть еще одна таблица под названием «Заказы», где я также добавил строку с названием «Кредиты», после чего после успешной оплаты + проверки сопоставили кредиты с выбранным продуктом, он должен заполнить эту строку «Кредиты в таблице заказов». Проблема в том, что у меня есть таблица заказов, заполненная всеми данными, кроме последней строки -> Кредиты, в базе данных всегда отображается 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;
}
}
Я не могу понять это.
Вы должны включить исключения и поместить это в попытку, которая сообщит об ошибке.
Вы пытались добавить точку с запятой (:) перед именем столбца в bindParam?
да делал, тот же результат
Это PDO или MySQLi? Вряд ли и то, и другое. Вы бы удалили один из этих тегов?






Это довольно частый вопрос, поэтому он заслуживает ответа, каким бы очевидным он ни казался.
Если у вас есть запрос работающий INSERT, а один столбцов оказывается NULL, это означает, что исходная переменная содержал NULL.
Таким образом, проблема не в PDO, не в подготовленных операторах и не в базе данных, а просто в вашей исходной переменной $credits. Вы должны проверить свой код, связанный с этой переменной, и убедиться, что он содержит желаемое значение.
->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); не показывает никаких ошибок, я попытался изменить кодовое имя таблицы, а затем выдает ошибку исключения, когда я ввожу правильное имя таблицы, она ничего не показывает, я имею в виду, нет ошибки. Тем не менее в БД последняя строка равна NULL
@KamilWisniewski Может быть, дать $credits значение по умолчанию в определении вашей функции, $credits = 0) или отладить, где вы вызываете функцию и какая там переменная.
Может я не всю информацию написал. Я не могу указать $ Credit = 0, 100 или 1000, потому что это экспресс-оплата PayPal. Если пользователь выбирает напр. Продукт 1 имеет в БД количество кредитов 100, если он выбирает продукт 2, он имеет 200 и так далее. Поэтому после того, как он выбирает продукт, он перенаправляется на страницу оплаты PayPal с идентификатором session_id и pid-> product id. Когда он закончит оплату, он должен получить эти кредиты со ссылкой на эту сессию и pid. Вся информация заполняется в таблицы заказов в БД, за исключением этой дополнительной кредитов. В таблице «Продукты» я заполнил строку «Кредиты» суммами. Он по-прежнему заполняет последнее значение NULL в таблице заказов.
@KamilWisniewski, вам следует продолжить работу над своим кодом. Это, собственно, то, что делают все программисты. Мы мало чем можем вам помочь, не имея ни вашего кода, ни вашей базы данных, ни вашей учетной записи PayPal. Вы получили ответ на вопрос, почему столбец Credits (кстати, он называется столбцом, а не строкой) имеет значение null. Ваша задача выяснить, почему ваша переменная $credits равна нулю.
$stmt = $db->prepare("SELECT * FROM products");не имеет заполнителя, так что теперь это тоже должно работать.