@constatninkstrv

Не понимаю, как исправить ошибку?

Как исправить ошибку? Сам в PHP и БД недавно, решил сделать форму по гайду в интернете, но не понимаю почему появляется эта ошибка... Есть две страницы, одна с формой, другая с обновлением данных в таблице MY SQL. Ниже файл для обновления данных.
Ошибка при обновлении записи в базе данных:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens.


$db = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $ID =       $_POST['ID'];
    $SV =       $_POST['SV'];
    $OK =       $_POST['RESPONSE'];
    $AXT =       $_POST['AXT'];
    $TRANSFERS =       $_POST['TRANSFERS'];
    $CONVERSION =       $_POST['CONVERSION'];
    $PERFORMANCE =       $_POST['PERFORMANCE'];
    $APPEAL =       $_POST['APPEAL'];
    $TICKETS =       $_POST['TICKETS'];

    if(empty($ID)){
        echo "Вы не задали ID строки для обновления данных!";
        return;
    }

    $update_columns = array();
    if(trim($ID) !== "")   { $update_columns[] = "ID = :ID"; }
    if(trim($SV) !== "")   { $update_columns[] = "SV = :SV"; }
    if(trim($RESPONSE) !== "")   { $update_columns[] = "RESPONSE = :RESPONSE"; }
    if(trim($AXT) !== "")   { $update_columns[] = "AXT = :AXT"; }
    if(trim($TRANSFERS) !== "")   { $update_columns[] = "TRANSFERS = :TRANSFERS"; }
    if(trim($CONVERSION) !== "")   { $update_columns[] = "CONVERSION = :CONVERSION"; }
    if(trim($PERFORMANCE) !== "")   { $update_columns[] = "PERFORMANCE = :PERFORMANCE"; }
    if(trim($APPEAL) !== "")   { $update_columns[] = "APPEAL = :APPEAL"; }
    if(trim($TICKETS) !== "")   { $update_columns[] = "TICKETS = :TICKETS"; }
    
    if($update_columns > 0){
        $sql = "UPDATE supervisor SET " . implode(', ', $update_columns) . 'WHERE ID=:ID';
        
        $statement = $db->prepare($sql);
     
        $statement->bindParam(":ID", $ID);
        if(trim($SV) !== ""){
            $statement->bindParam(":SV", $SV);
        }
        if(trim($RESPONSE) !== ""){
            $statement->bindParam(":RESPONSE", $RESPONSE);
        }
        if(trim($AXT) !== ""){
            $statement->bindParam(":AXT", $AXT);
        }
        if(trim($TRANSFERS) !== ""){
            $statement->bindParam(":TRANSFERS", $TRANSFERS);
        }
        if(trim($CONVERSION) !== ""){
            $statement->bindParam(":CONVERSION", $CONVERSION);
        }
        if(trim($PERFORMANCE) !== ""){
            $statement->bindParam(":PERFORMANCE", $PERFORMANCE);
        }
        
        if(trim($APPEAL) !== ""){
            $statement->bindParam(":APPEAL", $APPEAL);
        }
        
        if(trim($TICKETS) !== ""){
            $statement->bindParam(":TICKETS", $TICKETS);
        }

        $statement->execute();
    
        echo "Строка c ID: " . $ID . " успешно обновлена!";
    }
}

catch(PDOException $e) {
    echo "Ошибка при обновлении записи в базе данных: " . $e->getMessage();
}
 
$db = null;
?>


Также форма для отправки данных:
<form action="update.php" method="POST">
        <div>
            label for='ID'>Выберите ID супервайзера:</label
            input type='text' id='ID' name='ID' required
        </div>
        <div>
            label for='SV'>Супервайзер:</label
            input type='text' id='SV' name='SV'
        </div>
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Выведите через var_dump сформированную строку запроса и массив параметров. Убедитесь, что в массиве есть все параметры, указанные в запросе, и нет ни одного лишнего параметра.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы