小编Ell*_*lle的帖子

使用like子句执行准备好的PDO语句

我是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)

php sql pdo prepared-statement

5
推荐指数
1
解决办法
4598
查看次数

标签 统计

pdo ×1

php ×1

prepared-statement ×1

sql ×1