Число "bound variables" не совпадает с числом "маркеры" [закрыт]


я Сделал некоторые изменения в сценарий и создают две ошибки:

  1. Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of жетоны in /localhost/admin/crud/изменить.php on line 33
  2. Warning: Cannot modify header information - headers already sent by (output started at localhost/admin/crud/изменить.php:33) in localhost/admin/crud/изменить.php on line 36

То, что было сделано: просто я добавил select для сохранения данные в базе данных. Сценарий:

    if(!empty($_GET['codusuario']) && $_SERVER['REQUEST_METHOD'] == 'GET'){
    $stm = $pdo->prepare('SELECT * FROM usuario WHERE codusuario = ?');
    $stm->bindParam(1, $_GET['codusuario'], PDO::PARAM_INT);
    $stm->execute() or die(implode('', $pdo->errorInfo()));

    $_POST = $stm->fetch(PDO::FETCH_ASSOC);
}

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if(empty($_POST['codusuario'])){
        $sql = 'INSERT INTO usuario (email,senha,chave,select2,pergunta) VALUES (?, ?, ?, ?, ?)'; //email, senha, chave, pergunta
        $stm = $pdo->prepare($sql);
        $stm->bindParam(1, $_POST['email']);
        $stm->bindParam(2, $_POST['senha']);
        $stm->bindParam(3, $_POST['chave']);
        $stm->bindParam(4, $_POST['select2']); //@new select box
        $stm->bindParam(5, $_POST['pergunta']);

        $stm->execute();
    } else {
        $sql = 'UPDATE usuario SET email = ?, senha = ?, chave = ?, pergunta = ? WHERE codusuario = ?';
        $stm = $pdo->prepare($sql);
        $stm->bindParam(1, $_POST['email']);
        $stm->bindParam(2, $_POST['senha']);
        $stm->bindParam(3, $_POST['chave']);
        $stm->bindParam(4, $_POST['pergunta']);
        $stm->bindParam(5, $_POST['codusuario'], PDO::PARAM_INT); //old number is 5
        $stm->bindParam(6, $_POST['select2']);
        $stm->execute();
    }

    header('Location: index.php');
    exit;
}
 2
Author: brasofilo, 2014-05-29

2 answers

Эта ошибка происходит, когда существует параметр, более или менее на запрос, в update:

   UPDATE usuario SET email = ?, senha = ?, chave = ?, pergunta = ? WHERE codusuario = ? 
                              1          2          3             4                    5 

Есть 5 вопросы и 6 переменных в bindParam():

$stm->bindParam(6, $_POST['select2']);

, Чтобы решить это, просто удалите шестой bindParam. Вторая ошибка, последствием первого

 5
Author: rray, 2014-05-29 03:05:33

"Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of жетоны in /localhost/admin/crud/изменить.php on line 33"

Да, потому что у вас есть запрос, с 5 параметров, и дает bind 6:

$sql = 'UPDATE usuario SET email = ?, senha = ?, chave = ?, pergunta = ? WHERE codusuario = ?';
    $stm = $pdo->prepare($sql);
    $stm->bindParam(1, $_POST['email']);
    $stm->bindParam(2, $_POST['senha']);
    $stm->bindParam(3, $_POST['chave']);
    $stm->bindParam(4, $_POST['pergunta']);
    $stm->bindParam(5, $_POST['codusuario'], PDO::PARAM_INT); //old number is 5
    $stm->bindParam(6, $_POST['select2']);
 4
Author: Bacco, 2014-05-29 03:05:55