INSERT INTO 没有填满所有行
INSERT INTO doesn't fill all rows
我的代码有问题,是 PayPal 快速集成。我的意思是在它的原始状态下经过一些调整以匹配我的数据库等它工作,它用 ex 填充行。 payerID 等等。
我的数据库中有 2 tables - 首先是 Products,它有 5 行,如 productID、Price、currency 等等,但我需要额外的 1 行 - 假设我们称之为 Credits。我手动将它添加到我的数据库中,用数据填充 Table 产品。
然后我有另一个 table 称为 Orders- 我也添加了名为 Credits 的行,而不是在成功付款+结帐后将 Credits 匹配到所选产品后,它应该在订单 table 中填写此行 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;
}
}
我想不通。
这是一个很常见的问题,因此值得回答,无论它看起来多么明显。
一旦您有一个 working INSERT 查询并且 one 列变为 NULL
,这意味着 源变量 包含NULL
。
所以问题既不在于 PDO,也不在于准备好的语句,也不在于数据库,而在于您的源变量,$credits
。您必须检查与此变量相关的代码并确保它确实包含所需的值。
我的代码有问题,是 PayPal 快速集成。我的意思是在它的原始状态下经过一些调整以匹配我的数据库等它工作,它用 ex 填充行。 payerID 等等。
我的数据库中有 2 tables - 首先是 Products,它有 5 行,如 productID、Price、currency 等等,但我需要额外的 1 行 - 假设我们称之为 Credits。我手动将它添加到我的数据库中,用数据填充 Table 产品。
然后我有另一个 table 称为 Orders- 我也添加了名为 Credits 的行,而不是在成功付款+结帐后将 Credits 匹配到所选产品后,它应该在订单 table 中填写此行 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;
}
}
我想不通。
这是一个很常见的问题,因此值得回答,无论它看起来多么明显。
一旦您有一个 working INSERT 查询并且 one 列变为 NULL
,这意味着 源变量 包含NULL
。
所以问题既不在于 PDO,也不在于准备好的语句,也不在于数据库,而在于您的源变量,$credits
。您必须检查与此变量相关的代码并确保它确实包含所需的值。