2011-05-25 102 views
0

代碼點火器吐出:代碼點火器的活動記錄查詢失蹤撇號

A Database Error Occurred 
Error Number: 1064 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TEST, `cardNumber` = 411111........11, `cardExpiry` = 1212, `authCode` = 110200,' at line 1 

UPDATE `pxpayRequest` SET `status` = 'approved', `cardName` = Visa, `cardHolder` = VISA TEST, `cardNumber` = 411111........11, `cardExpiry` = 1212, `authCode` = 110200, `dpsTxnRef` = 0000000800b51dde, `dpsMessage` = APPROVED WHERE `id` = 1 

而且,因爲很明顯這是由於'

缺少集爲什麼是正確不把代碼點火器,這些?

這裏是我的代碼:

$id = $result->MerchantReference; 
$cardName = $result->CardName; 
$cardHolder = $result->CardHolderName; 
$cardNumber = $result->CardNumber; 
$cardExpiry = $result->DateExpiry; 
$authCode = $result->AuthCode; 
$dpsRef = $result->DpsTxnRef; 
$dpsMessage = $result->ResponseText; 

$this->db->set('status', 'approved') 
     ->set('cardName', $cardName) 
     ->set('cardHolder', $cardHolder) 
     ->set('cardNumber', $cardNumber) 
     ->set('cardExpiry', $cardExpiry) 
     ->set('authCode', $authCode) 
     ->set('dpsTxnRef', $dpsRef) 
     ->set('dpsMessage', $dpsMessage) 
     ->where('id', $id) 
     ->update('pxpayRequest'); 

您可以通過看上面的查詢請參閱相關的值。

這裏是$的print_r導致

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [valid] => 1 
     ) 

    [Success] => 1 
    [TxnType] => Purchase 
    [CurrencyInput] => NZD 
    [MerchantReference] => 1 
    [TxnData1] => SimpleXMLElement Object 
     (
     ) 

    [TxnData2] => SimpleXMLElement Object 
     (
     ) 

    [TxnData3] => SimpleXMLElement Object 
     (
     ) 

    [AuthCode] => 121132 
    [CardName] => Visa 
    [CardHolderName] => VISA CARD 
    [CardNumber] => 411111........11 
    [DateExpiry] => 1212 
    [ClientInfo] => 125.236.220.238 
    [TxnId] => 4ddd9aa1dd14c 
    [EmailAddress] => SimpleXMLElement Object 
     (
     ) 

    [DpsTxnRef] => 0000000800b5d3c9 
    [BillingId] => SimpleXMLElement Object 
     (
     ) 

    [DpsBillingId] => SimpleXMLElement Object 
     (
     ) 

    [AmountSettlement] => 8.00 
    [CurrencySettlement] => NZD 
    [DateSettlement] => 20110526 
    [TxnMac] => BD43E619 
    [ResponseText] => APPROVED 
    [CardNumber2] => SimpleXMLElement Object 
     (
     ) 

    [IssuerCountryId] => 0 
) 
+0

應該逃避,你需要做的數據庫驅動程序的源快速調試到看看出了什麼問題。 ()設置在/system/database/DB_active_rec.php(確保其符合其中$這個 - >越獄()調用$值正確的流路),它應該從/系統/數據庫調用逃生() /DB_driver.php他們的工作是增加圍繞價值 – Lepidosteus 2011-05-25 23:54:12

回答

0

很奇怪:在任何最近的CodeIgniter應該正常工作。我能想到的唯一可能是關閉數據庫庫沒有正確識別您的數據庫,或者這些變量不知道爲字符串(所以沒有逃脫正在發生)。 echo is_string($cardName);說什麼?

+0

使用'回聲「是:」(IS_STRING。 ($ cardName)?'true':'false');'我得到'是:false' – Hailwood 2011-05-26 00:13:24

+0

正在執行echo $ cardName。是:」(真‘:‘假’IS_STRING($ cardName)?)。’;'我得到'維薩:FALSE' – Hailwood 2011-05-26 00:14:41

+0

顯然,這是一個對象... – Hailwood 2011-05-26 00:16:48

0

設置爲TRUE第三個參數嘗試。

$this->db->set('cardHolder', $cardHolder, TRUE); 
+0

完全相同的輸出... – Hailwood 2011-05-25 23:37:37

+0

即使這樣做在陣列更新格式的報價具有完全相同的輸出... – Hailwood 2011-05-25 23:38:42

0

我剛剛看了這個簡單的解決方案...

我改變變量$ _escape_char(系統/數據庫/驅動器/ mysql /下mysql_driver.php 36行的值..

這是

var $_escape_char = '`'; 

改爲

var $_escape_char = ' '; 

和現在的作品......但是,如果我我是affraid所做的任何安全問題..

感謝

1

我只是通過這個去 - 我認爲這個問題的一部分是由一些simplexml的返回值被認爲是對象。無論原因如何 - 您必須在插入前將值轉換爲字符串。值得慶幸的是它非常簡單,只需添加(串)

所以從這個

$cardName = $result->CardName; 

這個

$cardName = (string)$result->CardName;