0

使用 PHP PDO 尝试在数据库中进行简单的搜索。错误返回意味着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
4

1 回答 1

0

我通过将 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();
于 2021-09-27T22:27:46.397 回答