2015-06-30 2 views
0

Веб-сайт, на котором я работаю, отправляет неверную информацию о платежной стране в Sagepay (это поле теперь является мандатом на обновление 3,00), и я пытаюсь найти способ пройти правильная информация в файле PHP.Возвращаемое значение из базы данных SQL для Sagepay с использованием PHP-запроса

текущей строки отправить эту информацию:

$crypt .= "&BillingCountry=".$orderArray["country"]; 

Проблема с этим состоит в том, что поле «страна» в orderArray дает название страны, как установить в нашей CMS, а не код ISO, который SagePay требует.

Правильные коды ISO хранятся в базе данных SQL, поэтому информация доступна. В таблице базы данных содержатся уникальный идентификатор, имя, код ISO, номер ISO плюс другая информация, относящаяся к сайту.

мне нужно заменить выше склепа с этим:

$crypt .="&BillingCountry=".$countryISO; 

Где $ countryISO добавляется в код в качестве запроса. Этот запрос должен выглядеть в колонке ISO Code (isocode) таблицы базы данных стран и возвращать значение кода ISO в соответствии с именем «country» в orderArray.

Я попытался собрать что-то вместе, следуя php, используемому в других файлах для сайта, которые, похоже, что-то похожи. например:

$countryISO = $dbA->query("SELECT isocode FROM $tableCountries WHERE name=".$orderArray["country"]); 

Я также попытался:

$countryISO = $dbA->retrieveAllRecordsFromQuery("SELECT isocode FROM $tableCountries WHERE name=".$orderArray["country"]); 

Существует PHP-файл на сервере сайта, который имеет «запрос» и функции «retrieveAllRecordsFromQuery», среди других (например, число , fetch, retrieveAllRecords), а также включает в себя функцию, связанную с $ dbA, которая, как я полагаю, подключается к базе данных.

Мне нужен совет относительно того, как я могу добиться вытаскивания кода ISO из базы данных SQL. Мой код где-то рядом с тем, что мне нужно?

+0

Как конкретно этот код неудачу? Что делать, если не правильно использовать подготовленные инструкции, что происходит при выполнении запроса? I * подозреваемый * вы не оборачивать значение строки в кавычках (проблема, которая становится спорным при использовании подготовленных заявлений). – David

+0

вы должны обернуть значение имени кавычками: 'WHERE name = '". $ OrderArray ["country"]. "'" ' – Ormoz

+0

Дэвид, я не знаком с PHP (полностью из моей глубины), но был задан с сортировкой этого. Единственный способ, которым я знаю, что это не удается, - это загрузить его на наш живой сервер и использовать тестовую функцию Sagepay. Я просто получаю сообщение об ошибке, когда значение Billing Country недопустимо при отправке информации в Sagepay, что означает, что это не давая правильного значения (код ISO, например, GB). У меня нет никакого способа увидеть значение _what_, которое оно фактически получает, если что-нибудь. – Lauren

ответ

0

Я сумел найти решение, используя аналогичный код, используемый для другого шлюза для веб-сайта.Это решило проблему Billing Country и теперь успешно отправляет данные в Sagepay по протоколу 3.00.

Решение:

$countryMatch = $orderArray["country"]; 
    $cResult = $dbA->query("select * from $tableCountries where name=\"$countryMatch\""); 
    if (count($cResult) > 0) { 
     $cRecord = $dbA->fetch($cResult); 
     $customerCountry = $cRecord["isocode"]; 
    } else { 
     $customerCountry = ""; 
    } 
0

Прежде всего, в операциях sql, когда вы хотите отфильтровать поле строки, вы должны обернуть значение поля single quote : ' или double quote: ".

второй код:

$countryISO = $dbA->query("SELECT isocode FROM $tableCountries WHERE name=".$orderArray["country"]); 

не спасут iso code в $countryISO. чтобы сделать это, Вы должны использовать fetch_row в mysqli:

$result=$mysqli->query("SELECT isocode FROM $tableCountries WHERE name='".$orderArray["country"]."'"); 
$row=$result->fetch_row(); 
$countryISO =$row[0]; 

Теперь вы можете изменить свой предыдущий код:

$crypt .= " BillingCountry='".$countryISO."'"; 

P.S. Как вы и не отметили, я предположил, что $ dbA - это объект mysqli. если это не так, существует аналогичная процедура для PDO объектов с небольшими изменениями.

Чтобы создать $ Mysqli объект, используемый в вышеуказанном:

$mysqli=new mysqli($host, $user, $pass, $db); 
+0

Спасибо за это @Ormoz, я дал это, но я думаю, что мне не хватает что-то! Я получил эту ошибку при тестировании: _Fatal error: вызов функции-члена fetch_row() для не-объекта в FILENAME.php в строке 106_. Линия 106 - это код результата $ row = $. Мне нужно вызвать базу данных используя mysqli, как я видел в другой документации? – Lauren

+0

@Lauren Похоже, что объект 'mysqli' ($ dbA) не создан. Я отредактировал ответ и включил строку для создания объекта mysqli. на этот раз я переименовал '$ dbA' в' $ mysqli'. – Ormoz

+0

вы должны добавить эту строку в начало кода – Ormoz