у меня есть этот подготовленный оператор запросаКак отлаживать SQLSTATE [HY000]: Общие ошибки: 2031 в подготовленных заявлений
$stmt = $conn->prepare("
UPDATE language
SET lang_alias=:lang_alias , lang_name=:lang_name
WHERE lang_id=:lang_id"
);
Если я установить массив, чтобы связать значения
$query_array = array (":lang_alias" => "en", ":lang_name" => "English (UK)", ":lang_id" => 1) ;
и затем выполнить его
это не будет работать, я получаю
Notice: Array to string conversion
referring to
$stmt->execute(array($query_array));
и Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number'
ссылки на эту же страницу.
Затем я попытался использовать bindParam
связать значения
$stmt->bindParam(':lang_alias', $a);
$stmt->bindParam(':lang_name', $c);
$stmt->bindParam(':lang_id', $d3, PDO::PARAM_INT);
и работает отлично
Если я пытаюсь синтаксис альтернативный bindParam
$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);
это не работает. Дает
Warning: PDOStatement::bindParam() expects at most 5 parameters, 7 given
referring to
$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);
и
Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 '
referring to
$stmt->execute();
1. ли ошибка вызвана тем, что по умолчанию Подготовленные заявления преобразовать в строку все значения, так что я должен определить int
вручную? Вот почему bindParam
отлично работает? Или это что-то еще, что мне не хватает?
2. Почему bindParam("sssiii"...
sytntax не работает?
3. Я хочу, чтобы этот запрос получил свои значения динамически, поэтому использование bindParam
вручную не является вариантом. Я хотел бы использовать ассоциативный массив или синтаксис bindParam("sssiii"...
.
Как это сделать? Спасибо
@ Fred-ii- Done. По-прежнему такая же ошибка. Это была опечатка в SO, а не в моем коде. – slevin
@slevin Если комментарий Криса разрешил его, возможно, предложите ему опубликовать его в качестве ответа, прежде чем кто-то еще вытащит ковер из-под ног ;-) –
@ chris85 Да, именно так, спасибо, что указали это. Проблема с синтаксисом 'bindParam (« sssiii »...» по-прежнему существует. Я не вижу, что происходит. – slevin