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);
아무리 봐도 잘못된 부분은 없어보이는데, 도무지 모르겠습니다.
제가 뭔가 빠트린게 있는건지... 고수님들 도움 부탁드립니다.
이리저리 해보다가 나름대로 해결했습니다.
default값이 정해져 있어서 그런지... 쿼리를 통해 insert할 때(insert쿼리.xml 부분)
<column name="issendok" var="issendok" notnull="notnull"/>
이 부분을 아예 삭제를 하니 등록이 됩니다... ㅡ,.ㅡ;
스키마에서 칼럼에 default값을 정해놓으면 insert할 때는 값을 넣어주면 안되는 건가 봅니다. (맞나요?)
default라는 속성이... 값이 없을 때 기본값으로 한다는 말로 알고 있었는데... 이번 오류를 해결하면서 아닌 것 같기도 하구요... 머리아프네요...