Почтальон является 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 является только один объект. Но выполнение запроса в БД возвращает два, как и должно быть:
Я знаю, что здесь не хватает чего-то простого. Как я могу настроить это для работы?
Проблема в вашем запросе. Ваш 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)
(Вам не нужны двойные кавычки или точки)
Кроме того, вы должны использовать какой-то подготовленный оператор или хотя бы избежать пользовательского ввода.
Других решений пока нет …