2016-07-24 66 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的回答中解釋的 –