2011-03-22 7 views
0

테이블을 업데이트하고 싶습니다 ... 쿼리 테이블을 실행하면 업데이트되지만 오류 메시지가 나타납니다.db_affected_rows()는 항상 false를 반환합니다.

어떻게 해결할 수 있습니까? 행을 업데이트 한 다음 성공 메시지를 받으면 오류가 발생합니다.

$sql='UPDATE user SET email='.db_input($_POST['email']) 
    .' WHERE uname='.db_input($thisuser->getUserName()); 

if(db_query($sql)&& db_affected_rows()){ 
    $msg='Profile Updated Successfully'; 
}else{ 
    $errors['err']='Error(s) occured. Profile NOT updated'; 
} 

감사

기능 db_query

($ 쿼리, $ 데이터베이스 = "", $ CONN = "") { 전역의 $ CFG; if ($ conn) {/ * 연결이 제공됩니다 */ $ response = ($ database)? mysql_db_query ($ database, $ query, $ conn) : mysql_query ($ query, $ conn); } else { $ response = ($ database)? mysql_db_query ($ database, $ query) : mysql_query ($ query); }

if(!$response) { //error reporting 
     $alert='['.$query.']'."\n\n".db_error(); 
     Sys::log(LOG_ALERT,'DB Error #'.db_errno(),$alert,($cfg && 

$ CFG-> alertONSQLError())); echo $ msg; 디버깅 중 #uncomment 또는 dev. } return $ response; }

함수 db_affected_rows() { return mysql_affected_rows(); }

+2

나는 이것이 Drupal을 사용하고 있다고 생각합니까? 태그를 붙일 수 있습니다. – Jacob

+0

'db_affected_rows()'는'false'를 리턴합니까? 반환 값에'var_dump()'를 사용하면 어떨까요? –

+0

매번 다른 값을 사용하고 있습니까? 영향을받는 행은 값을 변경하지 않으면 0이 될 것입니다 (즉, 동일한 전자 메일 사용). –

답변

1

스 니펫이 정상적으로 보입니다.

사용자 이메일 주소를 동일한 값으로 변경하면 SQL 쿼리가 실행되지만 최적화 이유 때문에 레코드가 MySQL에 의해 업데이트되지 않으므로 db_query()가 반환됩니다. true이지만 db_affected_rows()는 false를 반환합니다. 이것이 의도 된 행동인지를 결정해야합니다.

0

직접 함수를 호출하는 대신 drupal의 API를 올바르게 사용해야하며 테이블 접두어를 지원하기 위해 {}을 사용하여 테이블을 래핑해야합니다.

또 다른 한가지는 양식으로 작성한 경우 양식 API와 제출 유효성 검사기를 사용하여이 코드를 실행해야한다는 것입니다. 또한 Drupal에는 user 테이블이 없지만 혼동을 피하기 위해 users이 있습니다. 사용자 정의 테이블의 이름을 바꿀 수 있습니다. drupal 사용자 계정을 업데이트하려면 다음과 같이해야합니다.

function my_form($form_state) { 
    $form['email'] = array(
    '#type' => 'textfield', 
    '#title' => t('Title'), 
    '#description' => t('The title you enter here appears on the page.'), 
); 

    return $form; 
} 

function my_form_validate(&$form, &$form_state) { 
    $mail = $form_state['values']['email']; 
    // Validate the email, user form_set_error(), to raise error 
} 

function my_form_submit(&$form, &$form_state) { 
    $mail = $form_state['values']['email']; 
    global $user; 
    $sql= "UPDATE {users} SET mail='%s' WHERE name='%s';" 

    if(db_query($sql, $mail, $user->name) && db_affected_rows()) { 
    drupal_set_message(t('Update successful')); 
    } 
    else { 
    .. 
    } 
} 
관련 문제