복붙노트

"잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다"데이터 삽입

PHP

"잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다"데이터 삽입

최신 정보

VALUES를 나열 할 때 사소한 실수를 저 지르려고했습니다. ": alias"가 아닌 ": username"을 넣어야합니다. 나는이 질문에 대한 답 신용이 그것을 원하는 사람에게는 자유 통치라고 생각하니? 아니면 질문을 삭제합니까?

실물

나는 Yii의 활동적인 레코드 패턴을 한동안 사용 해왔다. 이제, 내 프로젝트는 하나의 작은 트랜잭션을 위해 다른 데이터베이스에 액세스해야합니다. 나는 Yii의 DAO가 이것에 좋은 것이라고 생각했다. 그러나 나는 이상한 오류가 나타납니다.

여기 내 코드가 있습니다 :

public function actionConfirmation
{
    $model_person = new TempPerson();

    $model = $model_person->find('alias=:alias',array(':alias'=>$_GET['alias']));
    $connection=Yii::app()->db2;
            $sql = "INSERT INTO users (username, password, ssn, surname
                    , firstname, email, city, country) 
                    VALUES(:alias, :password, :ssn, :surname
                    , :firstname, :email, :city, :country)";
            $command=$connection->createCommand($sql);
            $command->bindValue(":username", $model->alias);
            $command->bindValue(":password", substr($model->ssn, -4,4));
            $command->bindValue(":ssn", $model->ssn);
            $command->bindValue(":surname", $model->lastName);
            $command->bindValue(":firstname", $model->firstName);
            $command->bindValue(":email", $model->email);
            $command->bindValue(":city", $model->placeOfBirth);
            $command->bindValue(":country", $model->placeOfBirth);
            $command->execute();
            $this->render('confirmation',array('model'=>$model));
}

그러면 다음 쿼리가 생성됩니다 (응용 프로그램 로그에 표시됨).

INSERT INTO users (username, password, ssn, surname, firstname, email
                   , city, country) 
VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country);

FYI $ model-> placeOfBirth는시와 카운티 값 모두에 있어야합니다. 그것은 오타가 아닙니다 (내가해야 할 바보 같은 일).

해결법

  1. ==============================

    1.이 오류는 매우 일반적이기 때문에 답변을 제공하기 위해 여기에 몇 가지 원인이 있습니다.

    이 오류는 매우 일반적이기 때문에 답변을 제공하기 위해 여기에 몇 가지 원인이 있습니다.

    1) : 매개 변수 이름이 실수로 바인드와 일치하지 않습니다 (typo?). 이것은 여기서 일어난 일입니다. 그는 : SQL 문에서 별명을 가지고 있지만 바인드 된 : username. 그래서 param 바인딩이 시도되었을 때, Yii / PDO는 SQL 문에서 username을 찾을 수 없었습니다. 이것은 "하나의 매개 변수가 짧음"을 의미하고 오류를 던졌습니다.

    2) 매개 변수에 bindValue ()를 추가하는 것을 완전히 잊었습니다. 이것은 Yii에서 배열이나 params ($ criteria-> params = array ( ': bind1'=> 'test', ': bind2'=> 'test)가있는 $ critera와 같은 다른 구문에서 더 쉽게 할 수 있습니다.

    3) CDataProvider와의 이상한 충돌. 함께 사용하거나 조인 할 때 페이지 매기기 및 / 또는 정렬. 이 특성을 특정, 쉬운 방법은 없지만 CDataProviders에서 복잡한 쿼리를 사용할 때 매개 변수가 떨어지고이 오류가 발생하는 이상한 문제가 발생했습니다.

    Yii에서 이러한 문제를 해결하는 데 매우 유용한 한 가지 방법은 구성 파일에 매개 변수 로깅을 설정하는 것입니다. config 파일의 db 배열에 다음을 추가하십시오.

    'enableParamLogging'=>true,
    

    로그 섹션에 CWebLogRoute 라우트가 설정되어 있는지 확인하십시오. 이것은주고받은 쿼리와 바인드하려고 시도한 모든 매개 변수를 출력합니다. 슈퍼 유용한!

  2. ==============================

    2.당신이 일을하도록하는 대신 작은 따옴표 안에서 param을 묶으려고 할 수도 있습니다.

    당신이 일을하도록하는 대신 작은 따옴표 안에서 param을 묶으려고 할 수도 있습니다.

    비교:

    Model::model()->findAll("t.description ilike '%:filter%'", array(':filter' => $filter));
    

    와:

    Model::model()->findAll("t.description ilike :filter", array(':filter' => '%' . $filter . '%'));
    
  3. ==============================

    3.위에 언급되지 않은이 오류의 원인은 매개 변수를 설정 해제 한 경우 동적 매개 변수 배열을 처리 할 때 매개 변수를 전달하기 전에 다시 색인화해야한다는 것입니다.이 잔인한 부분은 오류 로그가 모든 것이 옳은 것처럼 보이는 색인을 보여줍니다. 예 :

    위에 언급되지 않은이 오류의 원인은 매개 변수를 설정 해제 한 경우 동적 매개 변수 배열을 처리 할 때 매개 변수를 전달하기 전에 다시 색인화해야한다는 것입니다.이 잔인한 부분은 오류 로그가 모든 것이 옳은 것처럼 보이는 색인을 보여줍니다. 예 :

    SELECT id WHERE x = ?, y = ?, z = ?
    

    Log : Invalid parameter number : 매개 변수가 params ( "x", "y", "z")로 정의되지 않았습니다.

    이것은 오류를 던져서는 안되지만 인덱스가 다음과 같을 경우에 발생합니다.

    0 => x, 1 => y, 4 => z
    

    마지막 매개 변수는 키 2를 찾고 있으므로 정의되지 않은 것으로 간주합니다.

  4. ==============================

    4.같은 것을하려고 할 때이 오류가 발생했습니다 :

    같은 것을하려고 할 때이 오류가 발생했습니다 :

    $stmt = $pdo->prepare("select name from mytable where id = :id");
    $stmt->execute([
      'id' => $id,
      'unusedvar' => $foo, // This row causes the error.
    ]);
    

    기본적으로 execute ()에 전달 된 배열에는 사용하지 않은 매개 변수를 사용할 수 없습니다. execute ()에 전달 된 배열의 모든 값은 준비된 명령문에서 사용해야합니다.

    이것은 문서에도 지정되어 있습니다.

  5. from https://stackoverflow.com/questions/5874383/invalid-parameter-number-parameter-was-not-defined-inserting-data by cc-by-sa and MIT license