Return 来自 SQL 数据库的 Sagepay 使用 PHP 查询的值

Return value from SQL database for Sagepay using PHP query

我正在处理的网站正在向 Sagepay 发送不正确的账单国家/地区信息(此字段现在在 3.00 更新中是强制性的),我正试图找到一种方法来在 PHP 文件.

发送此信息的当前行是:

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

问题在于 orderArray 中的 "country" 字段给出了我们 CMS 中设置的国家/地区名称,而不是 Sagepay 要求的 ISO 代码。

正确的 ISO 代码保存在 SQL 数据库中,因此可以使用这些信息。数据库 table 包含唯一 ID、名称、ISO 代码、ISO 编号以及一些其他站点相关信息。

我需要用这个替换上面的地穴:

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

其中 $countryISO 作为查询添加到代码中。此查询应查看国家/地区数据库的 ISO 代码列 (isocode) table 和 return 与 orderArray 中的 "country" 名称相对应的 ISO 代码值。

我已经尝试将 php 用于该站点的其他文件中的内容放在一起,这些文件似乎正在实现类似的目标。例如:

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

我也试过:

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

站点服务器上包含一个 php 文件,该文件具有 'query' 和 'retrieveAllRecordsFromQuery' 函数等(例如计数、提取、retrieveAllRecords),还包含一个函数与我认为连接到数据库的 $dbA 有关。

我需要一些关于如何从 SQL 数据库中提取 ISO 代码的建议。我的代码是否接近我需要的?

首先,在sql语句中,当要过滤字符串字段时,应该将字段值用single quote : 'double quote: "包裹起来。

二、代码:

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

不会在 $countryISO 中保存 iso code。为此,您必须在 mysqli:

中使用 fetch_row
 $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);

我已经设法通过使用用于该网站的另一个网关的类似代码找到了解决方案。这已解决账单国家/地区问题,现在可以通过 3.00 协议成功向 Sagepay 发送数据。

解决方案:

    $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 = "";
    }