Количество связанных переменных не соответствует количеству токенов при использовании пользовательской функции PDO - PullRequest
0 голосов
/ 01 июня 2018

Я пробовал вопросы с похожими заголовками, но все они являются обычными запросами, которых нет в функциях.

Я пытаюсь создать функцию обновления в классе базы данных, поэтому мне не нужно выписыватьвесь процесс снова и снова.Тем не менее я получаю сообщение об ошибке:

Invalid parameter number: number of bound variables does not match number of tokens 

Вот моя функция.

 public function updateRow($query, $params) {
    try {
        $stmt = $this->master_db_data->prepare($query);
        foreach($params as $key => $val) {
            $stmt->bindValue($key+1, $val);
            $stmt->execute();
            return true;
        }
    } catch(PDOException $e) {
        die("Error: " . $e->getMessage());
    }
}

И ее использование:

$query = "UPDATE records SET content=?, ttl=?, prio=?, change_date=? WHERE id=?";
$params = array($SOA_content, $fields['SOA_TTL'], '1', $DATE_TIME, $id);
if($db->updateRow($query, $params)) {
    echo "Success";
}
else {
    echo "Fail";
}

Работа без функции работает:

$pdo = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
$query = "UPDATE records SET content=:content, ttl=:ttl, prio=:prio, change_date=:change_date WHERE id=:id";
$stmt = $pdo->prepare($query);
$stmt->bindValue(":content", $SOA_content);
$stmt->bindValue(":ttl", $fields['SOA_TTL']);
$stmt->bindValue(":prio", 1);
$stmt->bindValue(":change_date", $DATE_TIME);
$stmt->bindValue(":id", $id);
$stmt->execute();

Я ошибаюсь с моим bindValue в функции?Если да, то как?

1 Ответ

0 голосов
/ 01 июня 2018

Всегда проверяйте, чтобы ваши вызовы выполнялись после выполнения всех привязок.В этой ситуации переместите выполнение из цикла привязки.

...