gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:57:48 25 4
gpt4 key购买 nike

<分区>

我是 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();
}

当我尝试它时,我收到以下警告:警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 参数编号无效:绑定(bind)变量的数量与标记的数量不匹配

当我删除 like 子句和 $searchterm 参数时,它会正确返回结果。我想——比如 '%?%' —— 可能不是在双引号下创建此查询的合法方式,所以我尝试转义 ',但没有用。我四处寻找解决方案,发现有人将“% 和 %”移到了 $searchterm 所在的位置:

$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));

我得到了相同的结果。
任何帮助表示赞赏。谢谢!

/更新****/我在 http://us3.php.net/manual/en/pdo.prepared-statements.php 的示例 12 中找到了

示例 #12 占位符的无效使用

<?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]%"));
?>

我试过了,虽然我不再收到警告,但我没有得到任何结果。但是,当我直接执行查询时,我会得到几个结果。有什么想法吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com