db_affected_rows()始终返回false

时间:2011-03-22 05:49:46

标签: php mysql drupal

我想更新表...通过执行查询表确实得到更新但我也得到错误消息。

我如何解决此问题..如果更新了行,则获取成功消息,否则出错。

$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';
}

由于

  

function db_query($ query,   $数据库= “”,$康恩= “”){           全球$ cfg;                 提供if($ conn){/ *连接* /               $响应=($数据库)mysql_db_query($数据库,$查询,$康恩):的mysql_query($查询,$ conn);在?             }其他{               $响应=($数据库)mysql_db_query($数据库,$查询):的mysql_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;在debuging或dev期间#uncomment。           }           返回$ response; }

     

function db_affected_rows(){         return mysql_affected_rows();       }

2 个答案:

答案 0 :(得分:1)

您的代码段看起来不错。

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

答案 1 :(得分:0)

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

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

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

另一件事是,如果这是以表单形式完成的,那么您应该使用表单API并使用submit 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 {
    ..
  }
}