2010-06-01 3 views
2

Magento 용 새 지급 모듈을 개발 중이며 설명 할 수없는 문제가 있습니다. 신용 카드 후 실행 다음 코드는 확인 :Magento - 데이터가 데이터베이스에 삽입되지 않았지만 ID가 자동 증가되었습니다.

$table_prefix = Mage::getConfig()->getTablePrefix(); 
    $tableName = $table_prefix.'authorizecim_magento_id_link'; 

    $resource = Mage::getSingleton('core/resource'); 
    $writeconnection = $resource->getConnection('core_write'); 

    $acPI = $this->_an_customerProfileId; 
    $acAI = $this->_an_customerAddressId; 
    $acPPI = $this->_an_customerPaymentProfileId; 

    $sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')"; 
    $writeconnection->query($sql); 

    $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')"; 
    $writeconnection->query($sql); 

    $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')"; 
    $writeconnection->query($sql); 

나는 SQL 쿼리 구문이 정확하고 오류가 반환됩니다 방화범과 FirePHP를 사용하여 확인했습니다.

여기서 이상한 점은 데이터베이스를 점검하고 자동 증가 값이 코드 실행마다 증가한다는 것입니다. 그러나 데이터베이스에 행이 삽입되지 않습니다. 첫 번째 쓰기 직후에 die(); 문을 추가하여이를 확인했습니다.

왜 이런 현상이 발생하는지 알고 싶습니다.

<config> 
    <global> 
     <models> 
      <authorizecim> 
       <class>CPAP_AuthorizeCim_Model</class> 
      </authorizecim> 
      <authorizecim_mysql4> 
       <class>CPAP_AuthorizeCim_Model_Mysql4</class> 
       <entities> 
        <anlink> 
         <table>authorizecim_magento_id_link</table> 
        </anlink> 
       </entities> 
       <entities> 
        <antypes> 
         <table>authorizecim_magento_types</table> 
        </antypes> 
       </entities> 
      </authorizecim_mysql4> 
     </models> 
     <resources> 
      <authorizecim_setup> 
       <setup> 
        <module>CPAP_AuthorizeCim</module> 
        <class>CPAP_AuthorizeCim_Model_Resource_Mysql4_Setup</class> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </authorizecim_setup> 
      <authorizecim_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </authorizecim_write> 
      <authorizecim_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </authorizecim_read> 
     </resources> 
    </global> 
</config> 

편집 : 약자로 테이블을 생성하는 쿼리는 다음과 같습니다

CREATE TABLE `mag_authorizecim_magento_id_link` (
    `link_id` INT(11) NOT NULL AUTO_INCREMENT, 
    `magCID` INT(11) NOT NULL, 
    `anCID` INT(11) NOT NULL, 
    `anOID` INT(11) NOT NULL, 
    `anObjectType` INT(11) NOT NULL, 
    PRIMARY KEY (`link_id`) 
) ENGINE=INNODB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 
+0

다음 표를 함께 보내주십시오. – Zak

+0

@Zak : 빠른 응답을 보내 주셔서 감사합니다. 테이블 def가 게시되었습니다. – Joseph

답변

1

처럼 보이는

config.xml 파일의 상대적인 부분이있다 커밋 명령이 누락되었습니다.

->save() 

는 .. 또는 코드에 파고 모든 것을 통해 검색 한 후 뭔가

+0

'$ writeconnection-> save();'를'$ writeconnection-> query ($ sql);'바로 다음에 추가하려고 시도했지만, 그 시점에서 codfe 실행이 멈추는 원인이되었습니다. 코드에 오류가 있다고 가정 할 수는 있지만 특정 문제를 해결할 수 없었습니다. 결과적으로'-> save()'는 내가 사용하고있는 것처럼 Magento의 내장 함수 대신 직접 SQL 메서드를 사용할 때만 작동한다는 것이 긍정적이다. 게다가, 어떤 예제 (핵심 모듈 포함)도'-> query()'를 사용할 때'-> save()'를 사용하지 않습니다. 생각해 줘서 고마워. – Joseph

+0

EAV 모델로 전환을 시도했지만 위에서 언급 한 것과 동일한 문제가 발생하는 것으로 보이지 않습니다. – Joseph

+0

이론이 여전히 정확하기 때문에 세부 사항이 완벽하지는 않지만 나는 대답으로이 것을 받아 들였습니다.내 솔루션도 대답으로 게시됩니다. – Joseph

2

, 나는 젠토는 데이터베이스 연결을위한 트랜잭션 모델을 사용하는 것을 깨달았다. 결과적으로 Imre L에 올바른 아이디어가 있었지만 잘못된 코드가있었습니다. 이것에

$sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')"; 
$writeconnection->query($sql); 

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')"; 
$writeconnection->query($sql); 

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')"; 
$writeconnection->query($sql); 

: 실험으로

, 나는이 코드 변경 놀랍게도 충분히

$sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3'); commit;"; 
$writeconnection->query($sql); 

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2'); commit;"; 
$writeconnection->query($sql); 

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1'); commit;"; 
$writeconnection->query($sql); 

을 일했다. 새 값이 데이터베이스에 나타납니다. (나는 MySQL이 트랜잭션을 지원한다는 것을 알지 못했다.)

새 코드에서 어딘가에 커밋 문이 실행되지 않아 데이터베이스에 값이 저장되지 않았다. 내가 갈 때 나는 이것을 사냥 할 것이지만, 현재는 commit;이 머물러야 할 것이다.

도움에 감사드립니다.

관련 문제