PHP PostgreSQL PDO无法将参数与LIKE绑定

dfty9e19  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(166)

使用PHP PDO在数据库中尝试简单搜索term。返回的错误意味着PDO无法确定参数类型。我在绑定它时显式地将其指定为STR,并在查询字符串中将其转换为varchar。在没有CAST的情况下,查询在MySQL中工作正常。

// Get course retry limit from database
$query = $this->db_connection->prepare("
SELECT column FROM datbase.table
WHERE
column LIKE CAST(CONCAT('%', :search_term, '%') as varchar)
GROUP BY column"
);
$query->bindValue(':search_term', $search_term, PDO::PARAM_STR);
$query->execute();

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: :search_term

如果像在直接查询调用中那样,使用单引号显式转义查询中的字符串,则会出现另一个错误:

Fatal error: Uncaught PDOException: SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR: could not determine data type of parameter $1
w8f9ii69

w8f9ii691#

我把里面的CAST直接移到了参数中,解决了这个问题。不知道为什么需要它,因为PHP变量是一个被编码为大写的字符串。
下面是正确的查询:

$query = $this->db_connection->prepare("
SELECT column FROM datbase.table
WHERE
column LIKE CONCAT('%', CAST(:search_term as VARCHAR), ' %')
GROUP BY column"
);
$query->bindValue(':search_term', $search_term, PDO::PARAM_STR);
$query->execute();

相关问题