код воспламенитель активных записей запроса пропущенных апострофов - PullRequest
0 голосов
/ 26 мая 2011

Код воспламенитель выплевывает:

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
)

Ответы [ 4 ]

1 голос
/ 20 октября 2011

Я только что прошел это - я думаю, что часть проблемы в том, что некоторые значения, возвращаемые simplexml, считаются объектами. Безотносительно причины - вы должны привести значения в виде строки перед вставкой. К счастью, это действительно просто, просто добавьте (строка)

так из этого

$cardName = $result->CardName;

к этому

$cardName = (string)$result->CardName;
0 голосов
/ 26 мая 2011

Довольно странно: на любом последнем CodeIgniter, который должен работать правильно.Единственное, что я могу думать о том, что это может быть отключено, это то, что библиотека db неправильно идентифицирует вашу базу данных, или эти переменные почему-то не идентифицируются как строки (поэтому экранирование не происходит).Что говорит echo is_string($cardName);

0 голосов
/ 01 октября 2011

Я только что прочитал простое решение для этого ...

Я изменил значение var $ _escape_char (system / database / drivers / mysql / mysql_driver.php, строка 36 ..

Это было

var $_escape_char = '`';

Изменено на

var $_escape_char = ' ';

и теперь это работает ... Но я боюсь, если у меня возникнут какие-либо проблемы с безопасностью ..

Спасибо

0 голосов
/ 26 мая 2011

Попробуйте с третьим параметром, установленным в ИСТИНА.

$this->db->set('cardHolder', $cardHolder, TRUE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...