У меня есть запрос, который выглядит так:
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 является синтаксической ошибкой. Поэтому у вас должны быть дополнительные поля параметров, которые вы нам не показали. Было бы также полезно, если вы покажете нам, как вы связываете параметры (или передаете параметры для выполнения ()).