我使用一个循环来处理一些查询和所有查询都是一样的,除了一个不使用参数的其他人:是否可以统计PDO准备语句中的参数数量?
$queries = array(
'query1' = "SELECT * FROM table_1 WHERE id=:id",
'query2' = "SELECT * FROM table_2 WHERE id=:id",
'query3' = "SELECT * FROM table_3"
);
$params = array(':id',1);
foreach($queries as $q) {
$st = $pdo->prepare($q);
if($st->execute($params)) {
// do stuff with results
} else {
echo json_encode($st->errorInfo());
}
}
这里的问题是,$ ST->执行($ params)在没有定义参数的查询上不起作用,这就是为什么我想知道在发送之前是否可以分析查询的原因。
这是假代码,只要有一个参数(:id)或none,它应该工作而不管查询结构如何。
更新,解决了:
我如何申请通过@ Jonast92给出了解决方案:
foreach($queries as $q) {
$st = $pdo->prepare($q);
if($st->execute(substr_count($q,":") > 0 ? $params : null)) {
// do stuff with results
} else {
echo json_encode($st->errorInfo());
}
}
你正在写这些查询在数组中提前,对吧?为什么不制作另一个包含params数量的数组?因此,您只需根据您尝试运行哪个查询来查找数组。 – 2014-11-05 22:01:24
这应该是有点动态的,但这个和下面的答案的组合应该工作。谢谢。 – vcanales 2014-11-05 22:03:19
另一种方法是指定'where 1:= id or 1 = 1',基本上颠覆参数。 – 2014-11-05 22:07:36