是否可以计算PDO准备语句中的参数数量?

时间:2014-11-05 21:58:32

标签: php 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-&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());
  }
}

1 个答案:

答案 0 :(得分:3)

您可以使用substr_count来计算:发生的次数,表示要在预准备语句中执行的参数数量。

$itemInArray = "SELECT * FROM table_1 WHERE id=:id";
$count = substr_count($itemInArray, ':'); // 1