【问题标题】:PDO INSERT INTO [No error in BindingParam but no data is sent to the databasePDO INSERT INTO [BindingParam 没有错误,但没有数据发送到数据库
【发布时间】:2018-08-16 17:17:28
【问题描述】:
$sqlPickInsert = "INSERT INTO record_pickup(pickup_id, order_code, customer_id,
                                s_date, r_date, payment_amount, payment_mode, 
                                pickup_comments, branch, order_status) 
                               VALUES (?,?,?,?,?,?,?,?,?,?)";

    echo "$sqlPickInsert <br>"; 
    echo "pickupID $nullvalues" ."<br>";
    echo "ordercode $newPickupCode" ."<br>";
    echo "customer ID $finalexistCustID" ."<br>";
    echo "loginDate $login_Date" ."<br>";
    echo "pickup $finalpick_date" ."<br>";
    echo "amount $newExpenditures" ."<br>";
    echo "paymode $paymentMode" ."<br>";
    echo "notes$finalpick_notes" ."<br>";
    echo "login branch$login_Branch" ."<br>";
    echo "status $nullvalues" ."<br>";

    $stmt1 = $conn->prepare($sqlPickInsert);
    if (!$stmt) die ('prepare() failed!');

    $checkID = $stmt1->bindParam(1, $nullvalues,PDO::PARAM_INT); //id
    if (!$checkID) die ('bindParam() ID failed!<br>');

    $checkCODE=$stmt1->bindParam(2, $newPickupCode,PDO::PARAM_STR);//ordercode
    if (!$checkCODE) die ('bindParam() ID failed!<br>');

    $checkCUSTID= $stmt1->bindParam(3, $finalexistCustID,PDO::PARAM_STR);//customerid
    if (!$checkCUSTID) die ('bindParam() ID failed!<br>');

    $checkSDATE=$stmt1->bindParam(4, $login_Date,PDO::PARAM_STR);//s_date
    if (!$checkSDATE) die ('bindParam() ID failed!<br>');

    $checkRDATE=$stmt1->bindParam(5, $finalpick_date,PDO::PARAM_STR);//r_date
    if (!$checkRDATE) die ('bindParam() ID failed!<br>');

    $checkAMOUNT=$stmt1->bindParam(6, $newExpenditures,PDO::PARAM_STR);//amount
    if (!$checkAMOUNT) die ('bindParam() ID failed!<br>');

    $checkPAYMODE=$stmt1->bindParam(7, $paymentMode,PDO::PARAM_STR);//paymode
    if (!$checkPAYMODE) die ('bindParam() ID failed!<br>');

    $checkNOTE=$stmt1->bindParam(8, $finalpick_notes,PDO::PARAM_STR);//note
    if (!$checkNOTE) die ('bindParam() ID failed!<br>');

    $checkBRANCH=$stmt1->bindParam(9, $login_Branch,PDO::PARAM_STR);//branch
    if (!$checkBRANCH) die ('bindParam() ID failed!<br>');

    $checkSTATUS=$stmt1->bindParam(10, $nullvalues,PDO::PARAM_STR);//status
    if (!$checkSTATUS) die ('bindParam() ID failed!<br>');

    $stmt1->execute();

很抱歉刚刚学习 PDO,我来这里是为了了解更多关于我在此特定查询中遇到的关于 INSERT into 的问题。我找不到代码哪里出错了。由于我使用 bindparams INSERT into 的其他查询正在工作。我错过了什么吗?所有变量都显示正确的信息。我不明白为什么这不起作用。

【问题讨论】:

  • 抛出任何错误?把它放在你的 php 文件的顶部 error_reporting(E_ALL); ini_set('display_errors', 1);
  • 由于picking_id 是一个自动增量列,您可以在插入时忽略它。不确定$nullvalues 是什么。
  • NULL 不允许用于order_status
  • 如果您检查了execute() 的结果,您会看到错误。
  • 对于 PDO,我建议启用异常而不是检查每个调用的结果。

标签: php pdo insert-into


【解决方案1】:

试试这个代码:

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt1 = $conn->prepare($sqlPickInsert);

$params = [
  $nullvalues,
  $newPickupCode,
  $finalexistCustID,
  $login_Date,
  $finalpick_date,
  $newExpenditures,
  $paymentMode,
  $finalpick_notes,
  $login_Branch,
  $nullvalues
];

$stmt1->execute($params);

将一组值传递给execute() 比所有那些bindParam() 调用更容易。我不知道这么多 PHP 开发人员从哪里得到bindParam() 是必要的想法。

启用 ERRMODE_EXCEPTION 比在每次调用 PDO 函数后编写检查更容易。这样可以确保如果在准备或执行期间出现任何问题,您将自动收到错误(实际上是异常)。

正如@Barmar 评论的那样,您可能会发现execute() 上的错误是您似乎将NULL 传递给order_status,但该列不接受NULL。

至少我们猜测$nullvalues 的值是NULL,但你没有这么说。

【讨论】:

  • 感谢您的提示!我吸取了教训,彻底检查数据库。我很沮丧,当我尝试这段代码时已经是午夜了。我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2020-03-13
  • 2023-04-06
  • 2020-06-22
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多