2011-03-22 148 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($查询, 的$ database = “”,$康恩= “”){ 全球$ CFG; ($ conn){/ * connection is */ $ response =($ database)?mysql_db_query($ database,$ query,$ conn):mysql_query($ query,$ conn); ($ database)?mysql_db_query($ database,$ query):mysql_query($ query);其他{0} }

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。 } return $ response; }

函数db_affected_rows(){ return mysql_affected_rows(); }

+2

我猜这是使用Drupal?可能想要标记它。 – Jacob 2011-03-22 05:53:52

+0

你确定db_affected_rows()返回false吗?如果你对它的返回值使用'var_dump()'会怎么样? – 2011-03-22 05:55:13

+0

您是否每次都使用不同的值?影响行将为0,如果你不改变的值(即使用相同的电子邮件) – 2011-03-22 05:58:43

回答

1

你的代码段看起来不错。

但请注意,如果您要将用户电子邮件地址更改为相同的值,则SQL查询将被正确执行,但由于优化原因,该记录不会被MySQL更新,因此db_query()将返回true,但db_affected_rows()将返回false。你需要决定这是否是你想要的行为。

0

您应该正确使用drupal的API,而不是直接调用函数,也应该使用{}包装您的表以支持表前缀。

$sql= "UPDATE {user} SET email='%s' WHERE uname='%s';" 

if(db_query($sql, $_POST['email'], thisuser->getUserName())&& db_affected_rows()){ 
    .. 
} 

另一件事是,如果这是在形式上做,你应该在表单API,并使用提交validater运行这段代码。另外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 { 
    .. 
    } 
}