我的PHP / PDO查询仅应返回9条记录,而应返回9条记录

时间:2019-06-21 01:14:01

标签: javascript php oracle pdo

我有一个Web应用程序,用于查询Oracle数据库以获取没有X,Y的ID,我正在使用Jquery和PHP API, 我将ID列表传递给PHP以查询数据库,并返回有关记录的更多信息,以便对它们进行地理编码。 由于某种原因,我的代码跳过了第一条和最后一条记录,仅返回9中的7。

在SQL Developer中,我的SQL查询返回9条记录,这是正确的。 我的JavaScript,我的数组(theIDS)具有9个记录IDS  我选择的是这些,这些与我在SQL Developer中使用的相同。

我的PHP页面处理该数组并返回9中的7。首先和最后跳过。

在SQL Developer中,我的SQL查询返回9条记录,这是正确的。

SELECT ID, M_ADD1,M_CITY,M_STATE FROM CI_Data
  WHERE ID IN
('1129','135','158','306','325','397','630','755','776');

我的JavaScript代码:

var theIDS = ["1129", "135", "158", "306", "325", "397", "630", "755", "776"];

var phpIDS = theIDS.join();

// My AJAX call to the PHP to pass the array and return the records.
    $.ajax({ url : "forgeocode.php",
        type       : 'POST',                                             
    data       : {'data': JSON.stringify(phpIDS)},
    success    : function(result){
        console.log(result.length + "   Records");
        console.log(result);

        for (var i = 0; i < result.length; i++) {
                        console.log(result[i][0]+ " ID Number");
                        console.log(result[i][1]);
                         console.log(i);
        }
    }
});

我的PHP页面获取POST并查询记录

$db = new PDO('oci:dbname=//myDBName:1521/infrastructuregisdev', 'Acct', 'Pwd');;

$arrData= $_POST['data'];
$arr = explode(",",$arrData);
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT ID, M_ADD1,M_CITY,M_STATE FROM CIGIS.CI_DATA WHERE ID IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($arr);
$data = $stm->fetchAll();

header('content-type: application/json');
echo json_encode($data);

我需要全部9条记录,不确定是否是使用PDO的PHP页面。为什么跳过第一条和最后一条记录?

2 个答案:

答案 0 :(得分:1)

您在JavaScript中将字符串作为JSON发送,因此您需要在PHP中使用json_decode()

$arrData= json_decode($_POST['data']);

如果不执行此操作,则$arrData中会有双引号。爆炸后,第一个值为'"1129',最后一个为'776"'。这些与表格中的ID不匹配。

首先,实际上并不需要将字符串转换为JSON。实际上,甚至不需要将数组转换为字符串。只需发送数组,它将被正确编码。在JavaScript中使用它:

    data       : {'data': theIDS},

$arr = $_POST['data'];

在PHP中。

答案 1 :(得分:0)

JSON.stringify(phpIDS)

这将创建以下内容:

  

“ 1129,135,158,306,325,397,630,755,776”

然后将其传递给PHP,您将在以下代码上使用它:

$arr = explode(",",$arrData);

但是问题是您在','上展开了一个字符串,这将为您提供以下值:

  

“ 1129   135   158   306   325   397   630   755   776“

因此,当您尝试对其运行“ IN()”时,它不能匹配第一个和最后一个值。我想你明白为什么吗?

因此,您需要先进行调整,然后首先在字符串上运行json_decode。

$arrData= json_decode($_POST['data']);

然后查询您的数据库!

编程愉快。