Prepared statement failed: INSERT INTO `xe_androidpushapp_push` (`pushid`, `type`, `target_browser`, `target_title`, `text`, `target_url`, `push_date`, `issendok`) VALUES (?, ?, ?, ?, ?, ?, ?, ?) Array ( [0] => mysqli_stmt Object ( [affected_rows] => 0 [insert_id] => 0 [num_rows] => 0 [param_count] => 8 [field_count] => 0 [errno] => 2031 [error] => No data supplied for parameters in prepared statement [sqlstate]

 

이런 오류가 스키마의 DB구조와 일치 하지 않는 쿼리를 실행하기 때문에 오류가 난다고 했는데...

(https://xetown.com/qna/492613)

 

아무리봐도 뭐가 틀린지 잘 모르겠습니다. 

 

[스키마 부분에서 변경사항]

<column name="issendok" type="char" size="1" default="N" notnull="notnull"/>

 

[모듈.class.php 에서 업데이트 부분]

if(!$oDB->isColumnExists('androidpushapp_push', 'issendok'))
{
    $oDB->addColumn('androidpushapp_push', 'issendok', 'char', 1, 'N', 'true');
}

 

 

[쿼리.xml insert 부분]

<query id="insertPush" action="insert">
    <tables>
        <table name="androidpushapp_push" />
    </tables>
    <columns>
       ...
        <column name="issendok" var="issendok" notnull="notnull"/>
    </columns>
</query>

 

[모듈에서 쿼리 실행하는 부분]

$args = new stdClass();

....

$args->issendok = "N";

$output = executeQuery('androidpushapp.insertPush', $args);

 

 

아무리 봐도 잘못된 부분은 없어보이는데, 도무지 모르겠습니다.

제가 뭔가 빠트린게 있는건지... 고수님들 도움 부탁드립니다.

 

 

 

  • profile
    자문자답입니다.

    이리저리 해보다가 나름대로 해결했습니다.

    default값이 정해져 있어서 그런지... 쿼리를 통해 insert할 때(insert쿼리.xml 부분)

    <column name="issendok" var="issendok" notnull="notnull"/>

    이 부분을 아예 삭제를 하니 등록이 됩니다... ㅡ,.ㅡ;

    스키마에서 칼럼에 default값을 정해놓으면 insert할 때는 값을 넣어주면 안되는 건가 봅니다. (맞나요?)

    default라는 속성이... 값이 없을 때 기본값으로 한다는 말로 알고 있었는데... 이번 오류를 해결하면서 아닌 것 같기도 하구요... 머리아프네요...
  • profile
    해결된줄 알았는데, 해결이 안되었습니다.

    오류내용에 보면... 쿼리 요청 param수는 8개입니다.

    Prepared statement failed: INSERT INTO `xe_androidpushapp_push` (`pushid`, `type`, `target_browser`, `target_title`, `text`, `target_url`, `push_date`, `issendok`)

    그런데 아래 내용에 보면... DB구조param수는 7개입니다.

    No data supplied for parameters in prepared statement [sqlstate] => HY000 [id] => 8 ) [1] => sssssss

    sssssss => string이 7개입니다. 7개의 param만 받고 있는 것 같아요.

    다시 말해서 스키마 파일을 수정했고, 또 db에 정상적으로 칼럼도 추가되었음에도 불구하고 xe에서 이 변경사항을 반영하지 못하고 여전히 예전것으로 보고 있는 듯 합니다. 캐시파일 재생성해도 전혀 작동하지 않습니다. 신기한 것은 insert가 아닌 update할 때는 또 잘 동작한다는 것입니다. 값 변경도 잘 되구요...

    ㅠㅠ 어디가 잘못된 것일까요?
  • profile
    해결되었습니다. 여기를 참조해주세요.~!
    https://xetown.com/qna/544934