Мой запрос PHP / PDO возвращает только 7 записей, когда он должен вернуть 9 - PullRequest
0 голосов
/ 21 июня 2019

У меня есть веб-приложение, которое запрашивает базу данных Oracle для идентификаторов, которые не имеют X, Y, я использую Jquery и PHP API, Я передаю список идентификаторов в PHP для запроса к базе данных и возвращаю больше информации о записях, чтобы я мог геокодировать их. По какой-то причине мой код пропускает первую и последнюю запись и возвращает только 7 из 9.

В SQL Developer мой запрос SQL возвращает 9 записей, что является правильным. Мой JavaScript, My Array (theIDS) имеет 9 записей IDS что я выбираю, это то же самое, что я использовал в SQL Developer.

Моя страница PHP обрабатывает массив и возвращает 7 из 9. Пропускает первый и последний.

В 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 записей, но я не уверен, что это страница PHP с использованием PDO. Почему пропускается первая и последняя запись?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы отправляете строку как JSON в JavaScript, поэтому вам нужно использовать json_decode() в PHP.

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

Если вы этого не сделаете, в $arrData есть двойные кавычки. И после того, как вы взорветесь, первое значение будет '"1129', а последнее - '776"'. Они не будут соответствовать идентификаторам в таблице.

Хотя в действительности нет необходимости преобразовывать строку в JSON. На самом деле, нет даже необходимости преобразовывать массив в строку. Просто отправьте массив, он будет правильно закодирован. Используйте это в JavaScript:

    data       : {'data': theIDS},

и

$arr = $_POST['data'];

в PHP.

0 голосов
/ 21 июня 2019
JSON.stringify(phpIDS)

Это создаст следующее:

"1129,135,158,306,325,397,630,755,776"

, который затем передается в PHP, для которого вы используете следующий код:

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

Но проблема в том, что вы взорвали строку на ',', которая даст вам следующие значения:

"1129 135 158 306 325 397 630 755776 "

Поэтому, когда вы пытаетесь запустить" IN () ", он не может соответствовать первому и последнему значению.Я думаю, вы понимаете, почему?

Итак, вам нужно сначала все настроить и запустить json_decode для строки.

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

А затем запросить вашу базу данных!

Удачного программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...