Yii 프레임워크 1.1을 사용하는 초보자입니다. 오늘 데이터베이스 DAO의 CRUD 업데이트 작업을 수행할 때 문제가 발생했습니다.
은 데이터베이스 테이블의 이름 값이 lishenglong인 레코드를 스마트로 업데이트하겠다는 의미입니다.
즉, 일괄 업데이트하면 다음 4행의 레코드가 업데이트되는데, 그렇지 않습니다.
실행 결과 첫 번째 행만 업데이트되는 상황입니다. ? ?
실행된 sql문을 보기 위해 로그를 켜봤습니다.
이유를 찾았습니다. 매개변수를 바인딩할 때 업데이트 조건 name='lishenglong'이 덮어씌워졌습니다. 내 업데이트 조건은 name='lishenglong'이었지만 구문 분석하면 name='smart'가 되었습니다. 실제로는 업데이트 조건이 아니라 업데이트하려는 새 값입니다. 고생하신 이모님께도 이유도 물어보시고 해결방법도 알려주세요~
Yii 프레임워크 1.1을 사용하는 초보자입니다. 오늘 데이터베이스 DAO의 CRUD 업데이트 작업을 수행할 때 문제가 발생했습니다.
은 데이터베이스 테이블의 이름 값이 lishenglong인 레코드를 스마트로 업데이트하겠다는 의미입니다.
즉, 일괄 업데이트하면 다음 4행의 레코드가 업데이트되는데, 그렇지 않습니다.
실행 결과 첫 번째 행만 업데이트되는 상황입니다. ? ?
실행된 sql문을 보기 위해 로그를 켜봤습니다.
이유를 찾았습니다. 매개변수를 바인딩할 때 업데이트 조건 name='lishenglong'이 덮어씌워졌습니다. 내 업데이트 조건은 name='lishenglong'이었지만 구문 분석하면 name='smart'가 되었습니다. 실제로는 업데이트 조건이 아니라 업데이트하려는 새 값입니다. 고생하신 이모님께도 이유도 물어보시고 해결방법도 알려주세요~
Yii1.1 클래스 참조 매뉴얼에서 system.db.CDbCommand의 업데이트 메소드를 확인하세요. 메소드 프로토타입은 다음과 같습니다.
<code>public integer update(string $table, array $columns, mixed $conditions='', array $params=array ( ))</code>
그 중 $params에 특별한 설명이 있습니다
<code>Do not use column names as parameter names here. They are reserved for $columns parameter.</code>
필드 이름을 자리 표시자 이름으로 사용하지 말라는 의미입니다.
해결책은
<code>'name=:cname',array(':cname'=>'lishenglong')</code>