我有一个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页面。为什么跳过第一条和最后一条记录?
答案 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']);
然后查询您的数据库!
编程愉快。