2016-07-24 89 views
1

我尝试了Mollie支付处理器来创建CMS,但我遇到了问题。当我尝试将数据输入到MySQL数据库时,它不会那样做。我收到此错误:PDO bindParam不能正常工作“非对象上的bindParam()”

Fatal error: Call to a member function bindParam() on a non-object in /home/ubuntu/workspace/examples/01-new-payment.php on line 83

这是完整的代码:

<?php 
/* 
* Example 1 - How to prepare a new payment with the Mollie API. 
*/ 

$amount  = 100.50; 
$description = "Booking for Villa Hijau"; 
$days  = 10; 
$name  = "####"; 
$email  = "####"; 

try { 
    /* 
    * Initialize the Mollie API library with your API key. 
    * 
    * See: https://www.mollie.com/beheer/account/profielen/ 
    */ 
    include "initialize.php"; 

    /* 
    * Generate a unique order id for this example. It is important to include this unique attribute 
    * in the redirectUrl (below) so a proper return page can be shown to the customer. 
    */ 
    $order_id = time(); 

    /* 
    * Determine the url parts to these example files. 
    */ 
    $protocol = isset($_SERVER['HTTPS']) && strcasecmp('off', $_SERVER['HTTPS']) !== 0 ? "https" : "http"; 
    $hostname = $_SERVER['HTTP_HOST']; 
    $path  = dirname(isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']); 

    /* 
    * Payment parameters: 
    * amount  Amount in EUROs. This example creates a € 10,- payment. 
    * description Description of the payment. 
    * redirectUrl Redirect location. The customer will be redirected there after the payment. 
    * webhookUrl Webhook location, used to report when the payment changes state. 
    * metadata  Custom metadata that is stored with the payment. 
    */ 
    $payment = $mollie->payments->create(array(
     "amount" => $amount, 
     "description" => $description, 
     "redirectUrl" => "{$protocol}://{$hostname}{$path}/03-return-page.php?order_id={$order_id}", 
     "webhookUrl" => "{$protocol}://{$hostname}{$path}/02-webhook-verification.php", 
     "metadata" => array(
      "order_id" => $order_id 
     ) 
    )); 

    /* 
    * In this example we store the order with its payment status in a database. 
    */ 
    database_write($order_id, $payment->status, $amount, $description, $days, $name, $email); 

    /* 
    * Send the customer off to complete the payment. 
    */ 
    header("Location: " . $payment->getPaymentUrl()); 
} 
catch (Mollie_API_Exception $e) { 
    echo "API call failed: " . htmlspecialchars($e->getMessage()); 
} 


/* 
* NOTE: This example uses a text file as a database. Please use a real database like MySQL in production code. 
*/ 
function database_write($order_id, $status, $amount, $description, $days, $name, $email) 
{ 
    $db_user = 'mollie'; 
    $db_pass = '####'; 
    $order_id = intval($order_id); 
    // Use $status to get the order status 
    $dbh  = new PDO('mysql:host=localhost;dbname=orders', $db_user, $db_pass); 
    $stmt  = "INSERT INTO order (id, order_name, order_description, order_amount, order_customer, order_customer_email, order_status) VALUES (?,?,?,?,?,?,?)"; 
    if($stmt){ 
    $stmt->bindParam($order_id,$name,$description,$amount,$name,$email,$status); 
    $stmt->execute(); 
    } 
} 

提前感谢! 〜里克

+0

erm .... INSER INTO order' ???缺少'T' – RamRaider

+0

已更改但仍不能正常工作 –

+0

尝试为每个参数设置一个'bindParam',正如@Matt Musia所述 - 使用'$ dbh-> prepare'准备'语句' – RamRaider

回答

3

你应该准备你的SQL语句

$stmt = $dbh->prepare("INSERT INTO order 
    (id, order_name, order_description, order_amount, order_customer, 
order_customer_email, order_status) 
      VALUES (?,?,?,?,?,?,?)"; 

像建议BU弗雷德-II要小心,因为你用的是 “秩序”,

这是一个MySQL的保留字,

那么你应该使用围绕这个词backtics

`order` 
+0

噢,谢谢。我不知道。它的工作 –

+0

这些链接可能是有用的http://php.net/manual/en/pdo.prepared-statements.php或http://php.net/manual/en/book.pdo.php,如果我的答案是请将其标记为已接受 – scaisEdge

+0

旁注:OP正在使用未加引号的'order'。由于它是一个MySQL保留字,因此需要注意的是它要么将其转义/打勾,要么将其重命名为“order”以外的内容。这为未来的读者。 –

1

您打电话给bindParam()

您必须先使用PDO::prepare。见文档here

+0

谢谢。这是在@scaiseEdge的回答中解释的 –