我必须使用循环处理一些查询,并且所有查询都是相同的,除了不使用其他查询的参数:
$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-&gt; execute($ params)不会对没有定义参数的查询起作用,这就是为什么我想知道在发送之前是否可以分析查询。< / p>
这是假代码,只要有一个参数(:id)或无参数,它就可以在任何查询结构中工作。
更新,已解决:
我如何应用@ 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());
}
}
答案 0 :(得分:3)
您可以使用substr_count来计算:
发生的次数,表示要在预准备语句中执行的参数数量。
$itemInArray = "SELECT * FROM table_1 WHERE id=:id";
$count = substr_count($itemInArray, ':'); // 1