我是PHP的新手,我正在尝试学习使用PDO连接到测试MySQL数据库.我有以下内容:
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();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,我收到以下警告:警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:无效的参数号:绑定变量的数量与令牌的数量不匹配
当我删除like子句和$ searchterm参数时,它会正确返回结果.我想 - 比如'%?%' - 可能不是用双引号创建这个查询的合法方式,所以我尝试转义',这不起作用.我四处寻找解决方案,发现有人将'%和%'移到$ searchterm所在的位置:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果.
任何帮助表示赞赏.谢谢!
/ UPDATE **** /我在http://us3.php.net/manual/en/pdo.prepared-statements.php的例子12中找到了
Example#12使用占位符无效
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name'])); …Run Code Online (Sandbox Code Playgroud)