web-dev-qa-db-ja.com

db_updateクエリの問題

私はubercartゲストチェックアウトモジュールを使用しています。ゲストなどが問題なく動作するので、注文を送信できます。

注文を確認して送信すると、このエラーが発生します

Recoverable fatal error: Argument 2 passed to db_query() must be an array,
string given, called in
/var/www/html/dev.demo.net/sites/all/modules/ubercart_guest_checkout/uc_guest_checkout.module
on line 263 and defined in db_query() (line 2342 of
/var/www/html/dev.demo.net/includes/database/database.inc).

これはその問題を引き起こしているクエリです

db_query('UPDATE {users} SET name = "%s", mail = "%s" WHERE uid = %d', $name, $mail, $account->uid);

このクエリを次のように変更しようとしました

db_update('users')
->fields(array(
    'name' => $name,
    'mail' => $mail
))
->condition('uid',$account->uid,'=')       
->execute();

まだ運がない、それは上記の指定されたエラーと同じをスローします。

エラーを回避するために、上記のクエリをどのように解決できますか? w.r.tクエリの提案は、Nice.Thanksになります。

1
Ram

Drupal 7は%placeholderスタイルのクエリプレースホルダーを使用しません。さらに、配列ではなくdb_queryに文字列のリストを渡すときにエラーが発生します。

あなたのクエリは

db_query('UPDATE {users} SET name = :name, mail = :mail WHERE uid = :uid',
           array(':name' => $name, ':mail' => $mail, ':uid' => $account->uid));

ただし、更新クエリにはdb_updateを使用する必要があります。その場合、実際には次のようになります。

db_update('users')
->fields(array(
    'name' => $name,
    'mail' => $mail
))
->condition('uid', $account->uid)       
->execute();

最初のdb_queryがD7のパラメーターの配列を受け入れるため、エラーが発生しています。

詳細: https://api.drupal.org/api/drupal/includes%21database%21database.inc/group/database/7

7
David Thomas

uidは一意の値なので、既存の値を更新できません。ユーザーの詳細を更新する場合は、クエリを次のように変更します。

db_update('users')
    ->fields(array(
        'name' => $name,
        'mail' => $mail
    ))
    ->condition('uid',$account->uid,'=')       
    ->execute();

注:上記のように条件にuidを追加する必要があります

1
sandy