db_affered_rows () всегда возвращает false - PullRequest
0 голосов
/ 22 марта 2011

Я хочу обновить таблицу ..., выполнив таблицу запросов, обновляется, но я также получаю сообщение об ошибке.

Как я могу исправить это .. если строка обновлена, то получить сообщение об успехе, в противном случае ошибка.

$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 ($ query, $база данных = "", $ conn = "") {global $ 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 во время отладки или разработки.} return $ response;}

function db_affered_rows () {return mysql_affered_rows ();}

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Ваш фрагмент выглядит хорошо.

Но учтите, что если вы меняете адрес электронной почты пользователя на то же значение, SQL-запрос будет выполняться нормально, но по причинам оптимизации запись не будет обновляться MySQL и, следовательно, db_query ()вернет true, но db_affered_rows () вернет false.Вы должны решить, является ли это предполагаемым поведением для вас.

0 голосов
/ 22 марта 2011

Вы должны правильно использовать API drupal, вместо того, чтобы напрямую вызывать функции, также вы должны обернуть свои таблицы {} для поддержки префиксов таблиц.

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

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

Другое дело, что если это делается в форме, вы должны использовать 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 {
    ..
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...