Использование функции для построения подготовленного запроса PDO - PullRequest
0 голосов
/ 29 декабря 2011

количество связанных переменных не соответствует количеству токенов… в строке 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 s в функцию ... Я предполагаю, что это как-то связано с return?

1 Ответ

1 голос
/ 29 декабря 2011

Проблема связана с областью действия функции.Переменные извне функции могут использоваться внутри нее только в том случае, если (а) они переданы в качестве аргументов или (б) если они импортированы с использованием оператора global.Последнее очень плохая идея.

Вам необходимо передать объект оператора в вашу функцию, а также значение, которое вы хотите связать:

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

При этом ваш код выглядиточень сломленИдея определения того, должно ли значение передаваться как целое число или строка на основе его типа в приложении (а не типа столбца базы данных), кажется мне неверной. Кроме того, вы делаете foreach, но будет использоваться только последний элемент в массиве, поскольку вы привязываете только один параметр (:value).Вы почти наверняка должны переосмыслить весь свой подход здесь.

...