使用函数构建 PDO 准备的查询


Using a function to build a PDO prepared query

绑定变量的数量与令牌的数量不匹配...在第 54 行

我正在尝试使用函数来构建 pdo 准备的查询,但我遇到了各种错误。

23  function get_type($a) {
24      if (is_numeric($a)) return $record_data->bindParam(":value", $a, PDO::PARAM_INT); // $a is a number
25      if (strlen($a)<1) return $record_data->bindParam(":value", "", PDO::PARAM_STR); // $a is empty
26      return $record_data->bindParam(":value", $a, PDO::PARAM_STR); // default
27  }
…
51  foreach($pair as $qstn=>$answr) {
52      $record_data = $dbh->prepare("SOME_SQL");
53      get_type($answr);
54      $record_data->execute();
55  }

在我将bindParam放入函数之前,它正在工作......我猜这与return有关?

问题是由于函数的作用域造成的。函数外部的变量只有在以下情况下才可用:(a( 它们作为参数传入,或者 (b( 使用 global 语句导入。后者是一个非常糟糕的主意。

您需要将语句对象以及要绑定的值传递给函数:

function get_type($record_data, $a) {
// ...
get_type($record_data, $answr);

话虽如此,您的代码看起来非常糟糕。根据其在应用程序中的类型(而不是数据库的列类型(确定值是否应作为整数或字符串传递的想法对我来说似乎是错误的。另外,你做了一个foreach,但只会使用数组中的最后一项,因为你只绑定到一个参数(:value(。 你几乎肯定需要重新考虑你的整个方法。