私は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になります。
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
uidは一意の値なので、既存の値を更新できません。ユーザーの詳細を更新する場合は、クエリを次のように変更します。
db_update('users')
->fields(array(
'name' => $name,
'mail' => $mail
))
->condition('uid',$account->uid,'=')
->execute();
注:上記のように条件にuidを追加する必要があります