【问题标题】:PDO exception trying to insert data into a blob尝试将数据插入 blob 的 PDO 异常
【发布时间】:2015-05-29 20:12:36
【问题描述】:

我正在尝试将一个非常大的 JSON 对象插入到一个 blob 中,我收到一个异常错误,指示无效参数号“未定义”。

代码:

<?php




        session_start();
        require_once('sconfig.php');
        require_once('mail/config.php');
        try{
                $token  = $_POST['stripeToken'];

                $customer = \Stripe\Customer::create(array(
                        'email' => $_SESSION['SESS_EMAIL'],
                        'card'  => $token
                ));
                $charge = \Stripe\Charge::create(array(
                        'customer' => $customer->id,
                        'amount' => $_SESSION['PLAN'],
                        'currency' => 'usd'
                ));

        } catch (Exception $e) {
                echo "<br>";
                echo "Handle your exception fool!";
        }
        //var_dump($customer);
        echo "<br>";
        //var_dump(json_decode($customer));
        echo "<br>";

        //echo $_SESSION['PLAN'];

        $pdo = new PDO(
                'mysql:host=' . DB_HOST . ';dbname=' . DB_DATABASE,
                DB_USER,
                DB_PASSWORD
        );
        //here we insert plan into the database following purchase
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
        $session_var = $_SESSION['SESS_MEMBER_ID'];


        //ATTENTION!!!  All of these variable need to be changed when price gets changed
        if($_SESSION['PLAN'] === '3500'){
                $plan_var = 1;
                echo $plan_var;
                $sql = 'UPDATE accounting SET active = 1, plan = :plan_var WHERE id = :session_var';
                $sql2 = 'INSERT INTO transactions (customer_object, charge_object) VALUES(:customer, :charge)';
        }
        else if($_SESSION['PLAN'] === '2500'){
                $plan_var = 2;
                echo $plan_var;
                $sql = 'UPDATE accounting SET active = 1, plan = :plan_var WHERE id = :session_var';
                $sql2 = 'INSERT INTO transactions (customer_object, charge_object) VALUES(:customer, :charge)';
        }
        else if($_SESSION['PLAN'] === 'NULL'){
                echo "Call a Dr. Something bad happened, or the programmer needs to be fired";

                header("location: ../index.php?p=failed");
        }
        else {
                echo "This looks like a paid invoice. Thank you!";
                $plan_var = 9;
                echo '<br>';
                echo $plan_var;
                echo '<br>';
                echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
                $sql = 'UPDATE accounting SET plan = :plan_var WHERE id = :session_var';
                $sql2 = 'INSERT INTO transactions (invoice_num) VALUES(:invoice_num)';
                //header("location: ../index.php?p=success");
        }

        $statement = $pdo->prepare($sql);
        $statement2 = $pdo->prepare($sql2);
        $statement->bindParam(':plan_var', $plan_var, PDO::PARAM_STR, 1);
        $statement->bindParam(':session_var', $session_var, PDO::PARAM_STR, 1);
        $statement2->bindParam(':customer', $customer, PDO::PARAM_LOB);
        $statement2->bindParam(':charge', $charge, PDO::PARAM_LOB);
        $statement2->bindParam(':invoice_num', $_SESSION['INVOICE_NUM'], PDO::PARAM_STR, 255);
        $user = $statement->execute();
        $user = $statement2->execute();

        var_dump($statement);

        //header("location: ../index.php?p=success");

        //echo $token;
?>

我收到的错误如下:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /usr/home/nyctelecomm/www/pages/scharge.php:79 Stack trace: #0 /usr/home/nyctelecomm/www/pages/scharge.php(79): PDOStatement->bindParam(':customer', Object(Stripe\Customer), 3) #1 {main} thrown in /usr/home/nyctelecomm/www/pages/scharge.php on line 79

如何使用 pdo 将 blob 数据导入 mysql 数据库?

【问题讨论】:

    标签: php mysql exception pdo


    【解决方案1】:

    基于您的堆栈跟踪

    Fatal error: Uncaught exception 
    'PDOException' with message 'SQLSTATE[HY093]: 
    Invalid parameter number: parameter was not defined' in 
    
    /usr/home/nyctelecomm/www/pages/scharge.php:79 Stack trace: 
    
    #0 /usr/home/nyctelecomm/www/pages/scharge.php(79): 
            PDOStatement->bindParam(':customer', Object(Stripe\Customer), 3) 
    #1 {main} thrown in /usr/home/nyctelecomm/www/pages/scharge.php on line 79
    

    看起来 PHP 在下面一行 (#79) 中遇到了问题

    $statement2->bindParam(':customer', $customer, PDO::PARAM_LOB);
    

    如果您尝试将参数 :customer 绑定到没有定义参数 :customer 的 SQL 语句中,我的猜测是。查看$sql2的所有可能值

    $sql2 = 'INSERT INTO transactions 
    (customer_object, charge_object) VALUES(:customer, :charge)';
    
    $sql2 = 'INSERT INTO transactions 
    (customer_object, charge_object) VALUES(:customer, :charge)';
    
    $sql2 = 'INSERT INTO transactions (invoice_num) VALUES(:invoice_num)';
    

    您似乎并不总是绑定:customer 参数。

    我会重构您的代码,以确保您不会绑定 SQL 中不存在的参数。

    【讨论】:

    • 我尝试将这两个查询作为复合查询进行,但效果也不是很好。 “重构”是什么意思?我不明白你的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2020-07-16
    • 2021-02-17
    • 2014-07-14
    • 2020-01-23
    • 2015-05-27
    • 1970-01-01
    相关资源
    最近更新 更多