Я новичок в PHP и пытаюсь научиться использовать PDO для подключения к тестовому MySQL db. У меня есть следующие:Выполнение подготовленной инструкции PDO с аналогичным предложением
try {
$db = new PDO('mysql:dbname=MYDBNAME;host=MYHOST', 'USERNAME', 'PASSWORD');
$query = "select * from books where ? like '%?%'";
$stmt = $db->prepare($query);
$stmt->execute(array($searchtype, $searchterm));
} catch(PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
}
Когда я пытаюсь это, я получаю следующее предупреждение: Внимание: PDOStatement :: Execute() [pdostatement.execute]: SQLSTATE [HY093]: Неверный номер параметра: количество связанных переменных не соответствует числу токенов
Когда я удаляю подобное предложение и параметр $ searchterm, он возвращает результат должным образом. Я думал, что «%?%» - не может быть законным способом создания этого запроса в двойных кавычках, поэтому я попытался сбежать », который не работал. Я огляделся в поисках решения, и обнаружили, что кто-то переехал «% и%» вниз, где $ SEARCHTERM является:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
я получил тот же результат.
Любая помощь приветствуется. Благодаря!
/ ОБНОВЛЕНИЕ ****/ я нашел на примере 12 http://us3.php.net/manual/en/pdo.prepared-statements.php
Пример # 12 Invalid использование заполнитель
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));
// Below is What they suggest is the correct way.
// placeholder must be used in the place of the whole value
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>
Я попробовал это, и несмотря на то, Я больше не получаю предупреждение, я не получаю никаких результатов. Однако, когда я выполняю запрос напрямую, я получу пару результатов. Есть предположения?
У меня такая же проблема, как и вы, я думал, что«% », где часть структуры запроса вместо значений;) – Strae