我正在学习PDO的绳索。
这是我的sql(可以在WHERE中出现的参数数量是变量)。
SELECT
ID, title
FROM
table
WHERE
something = ?
ORDER BY
:sort :dir
LIMIT
:start, :results
这是我的代码:
$query = $conn->prepare($sql);
if ($parameters) {
$i = 0;
foreach ($parameters AS $parameter) {
$i++;
$query->bindParam($i, $parameter);
}
}
$query->bindParam(':start', $pagination['start'], PDO::PARAM_INT);
$query->bindParam(':results', $pagination['results'], PDO::PARAM_INT);
$query->bindParam(':sort', $pagination['sort']);
$query->bindParam(':dir', $pagination['dir']);
$query->execute();
......以下是它生成的例外情况:
Invalid parameter number: mixed named and positional parameters
在同一查询中组合位置参数和命名参数是不可能的吗?或者我错过了什么?
谢谢!
答案 0 :(得分:10)
答案 1 :(得分:2)
使用包装函数,一个天真的替换函数就足够了。
if (strpos($sql, ":")) {
$i = -1;
while (strpos($sql, "?") && isset($parameters[++$i])) {
$parameters[":p$i"] = $parameters[$i];
unset($parameters[$i]);
$sql = preg_replace("/[?]/", ":p$i", $sql, 1);
}
}
将$ sort和$ dir直接混合到$ sql查询中。这两个是SQL标识符,而不是数据。