Передача CSV в PHP для кодирования нескольких строк в JSON

Почтальон является IDE для создания API в Chrome.

У меня есть маршрут, определенный как:

введите описание изображения здесь

С логикой в ​​выражении PHP в виде:

case "checkContactsWithServer":

if ($userId = authenticateUser($db, $username, $password, $gcmregid))
{
$phoneNumCSV = $_REQUEST['phone_num_csv'];

$syncContactsServerSQL = "SELECT DISTINCT
source_user_sync_id, target_user_sync_id, friend_request_sync_id, status, user_sync_id, phone_number
FROM friends a
RIGHT JOIN (SELECT distinct
user_sync_id,
phone_number
FROM users
WHERE phone_number IN ('".$phoneNumCSV."')
AND user_sync_id != '".$userId."'
) b
ON a.target_user_sync_id = '".$userId."'
AND a.source_user_sync_id = b.user_sync_id
OR a.source_user_sync_id = '".$userId."'
AND a.target_user_sync_id = b.user_sync_id;";

if($result = $db->query($syncContactsServerSQL))
{

$rows = array();

while($row = $result->fetch_assoc()){
$rows[] = array('data' => $row);
}

// now all the rows have been fetched, it can be encoded
echo json_encode($rows);

}
else
{
$out = FAILED;
}


}
else
{
error_log($out, 0);
$out = FAILED;
}


break;

Как видно выше, передача двух телефонных номеров в виде CSV, т.е. «число1, число2», результатом JSON является только один объект. Но выполнение запроса в БД возвращает два, как и должно быть:

введите описание изображения здесь

Я знаю, что здесь не хватает чего-то простого. Как я могу настроить это для работы?

0

Решение

Проблема в вашем запросе. Ваш IN пункт все ошарашен.

WHERE phone_number IN ('".$phoneNumCSV."')

Становится …

WHERE phone_number IN ('1231231234,1231231234')

Правильный синтаксис

WHERE phone_number IN ('1231231234','1231231234')

Вы можете достичь этого, изменив эту строку ..

$phoneNumCSV = $_REQUEST['phone_num_csv'];

К этому..

$phoneNumCSV = "'".implode("','", explode(",", $_REQUEST['phone_num_csv']))."'";

а затем удаляя кавычки в запросе.

WHERE phone_number IN ($phoneNumCSV)

(Вам не нужны двойные кавычки или точки)

Кроме того, вы должны использовать какой-то подготовленный оператор или хотя бы избежать пользовательского ввода.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]