Intereting Posts
Эвакуация с использованием косой черты, а затем использование stripslashes PHP Проблемы с маршрутизацией URI для модулей в Zend Framework Как опубликовать твит (описание и изображения) в twitter с помощью API или JAVASCRIPT Есть ли альтернатива heredoc в Java (heredoc как PHP)? Все строки ob_start echo Изменить регистрационные формы Symfony2 FOSUserBundle POST? Таблицы стилей Laravel и javascript не загружаются для не-базовых маршрутов Создание динамических URL-адресов в htaccess Перемещение строки из одной таблицы в другую (список значений вставки не соответствует списку столбцов) Вставьте строку перед концом ссылки Ошибка HTTP-запроса в неверном запросе PHP Несколько маршрутов с тем же анонимным обратным вызовом с использованием Slim Framework найти блок xml и заменить все, регулярное выражение, чтобы соответствовать и перезвонить, чтобы перезаписать PHP mysqli Команды не синхронизированы; вы не можете запустить эту команду сейчас PHP: Как идентифицировать И ИЗМЕНИТЬ повторяющиеся значения в массиве?

PHP PDO избегает вопросительного знака, поэтому он не считает, что это заполнитель

У меня есть запрос, который выглядит так:

SELECT CONCAT('path/to/page/?id=', id) AS link FROM users WHERE name = ? 

Я использую PDO для подготовки этого утверждения, и я получаю ошибку

 Invalid parameter number: number of bound variables does not match number of tokens 

потому что он считает, что знак вопроса в строке CONCAT является заполнителем.

Есть ли способ избежать вопросительного знака, поэтому PDO знает, что это не местозаполнитель?

Пожалуйста, не сообщайте о других способах получения ссылки. Я меняю старый код, который входит в старый механизм шаблонов, поэтому было бы намного меньше работы, чтобы найти способ избежать вопросительного знака, чем не помещать вопросительный знак в запрос.

PDO не путается вопросительным знаком внутри кавычек. Я просто тестирую это с помощью PHP 5.5.15.

 $sql = "SELECT CONCAT('path/to/page/?id=', id) AS link FROM foo WHERE name = ?;"; $stmt = $pdo->prepare($sql); $stmt->bindValue(1, 'name'); $stmt->execute(); print_r($stmt->fetchAll()); 

Он работает нормально, без ошибок о неправильном количестве параметров. Ваша ошибка вызвана тем, как вы связываете параметры, а не синтаксисом SQL.

Я подозреваю, что вы не показали нам весь запрос SQL, потому что WHERE без FROM является синтаксической ошибкой. Поэтому у вас должны быть дополнительные поля параметров, которые вы нам не показали. Было бы также полезно, если вы покажете нам, как вы связываете параметры (или передаете параметры для выполнения ()).