绑定变量的数量与令牌的数量不匹配...在第 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
(。 你几乎肯定需要重新考虑你的整个方法。