Добрый день! Не нашел ни чего подходящего из тем на форуме. Есть SQL запрос 'select name from table where id in (?)' если его выполнить в студии и подставить в in id 2 и 3 то запрос выполняется правильно и выдает результат с id 2 и 3. сама функция выглядит так: public function read_single_post2($id) { $this->id = $id; $query = ' select name from table where id in (?) '; $post = $this->connection->prepare($query); $post->bindValue(1, $this->id, PDO:ARAM_INT); $post->execute(); return $post; } если запустить через http://localhost/api/v1/GetFile.php?id=2,3 выдает только первое значение пробовал так: http://localhost/api/v1/GetFile.php?id=14020&id=14021 выдает только второе значение как правильно передать значения параметра чтоб запрос выполнился как в студии?
Может кто с этим столкнется... Переделал немного функцию и заработало... public functionread_single_post2($id) { $idArr = explode(',', $id); $idArr = array_map(function($item) { return"'".trim($item)."'"; }, $idArr); $idStr = implode(',', $idArr); $query = 'SELECT name FROM table WHEREidIN ('.$idStr.') '; $post = $this->connection->prepare($query); $post->execute(); return$post; }
@AB_Nab, в выражении in(?) знак вопроса нужен для каждого элемента из $idArr (если $idArr передаём как аргумент в метод execute) Например, одним из вариантов: PHP: $idArr = [1,2,3,4,5]; $str1 = str_pad('?', count($idArr)*2-1, ',?'); $str2 = '?' . str_repeat(',?', count($idArr) - 1); Конечно, перед применением надо убедиться, что $idArr содержит хотя бы один элемент. Метод execute выполнять с параметром $idArr (Массив значений, содержащий столько элементов, сколько параметров заявлено в SQL-запросе - тех самых вопросительных знаков) PS: целые числа безопасны для вставки в тело запроса, но при этом надо убедиться, что это именно целые числа. Иначе - убиваете безопасность применения подготовленных запросов PPS: термин 'API' тут абсолютно ни при чём...
Зачем велосипед изобретать в кол-ве 5ти значений ? Вернитесь в начало и подумайте. Второе - какой смысл использовать prepare, когда у вас значения с типом integer ? Просто используйте синтаксис для убедительности данных и отправляйте простой запрос без prepare. PHP: <?php function buildQueryFromInteger( string $query, int ...$ids ): string { return sprintf ( $query, implode ( ', ', $ids ) ); } // SELECT * FROM tb WHERE id IN( 1, 2, 3, 4, 5 ) echo buildQueryFromInteger( 'SELECT * FROM tb WHERE id IN( %s )', ...[ 1,2,3,4,5 ] );