xml query 내용입니다.

<query id="insertLog" action="insert">
<tables>
<table name="documents_log" />
</tables>
<columns>
<column name="document_srl" var="document_srl" notnull="notnull" />
</columns>
</query>

 

그런데 아래와 같은 오류를 뿜어댑니다.

(
    [error] => -1
    [message] => Prepared statement failed: INSERT  INTO `itw_documents_log` 
 (`document_srl`) 
 VALUES (?)
    [variables] => Array
        (
            [_query] => INSERT  INTO `itw_documents_log` 
 (`document_srl`) 
 VALUES (?)
            [_elapsed_time] => 0.00000
        )

    [httpStatusCode] => 
)

db 객체로 직접 $oDB->_query 쿼리 할 수도 있지만 문자열을 처리하는 보안 장치는 xe가 편리하기 때문에 가급적 xml query 를 쓰려고 합니다.

 

Prepared statement 쿼리는 문자열을 안전하게 보호해주지만 오류를 뿜어대니 사용하기 어렵습니다. (prepared 쿼리가 보안에 우수하긴 할거에요)

 

작동을 안하니 일시적으로 해당 기능을 해제 합니다.

 

$oDB = DB::getInstance();
$oDB->use_prepared_statements = 'N';
$output = executeQuery('itw.insertLog', $log_args);
$oDB->use_prepared_statements = 'Y';

 

코드를 보면 알다시피 executeQuery 실행할 때만 prepared 기능을 일시적으로 비활성화 합니다.

 

잘 작동하더군요.

 

prepared 오류의 정확한 원인은 파악하지 못했지만, 일단은 xe xml query 통해 돌아가니 만족하렵니다.