web-dev-qa-db-ja.com

Wordpress mysqlテーブルを更新

Mysqlエントリがすでに存在するかどうかを確認するWordpressのプラグインを書いています。
存在しない場合Wordpressはテーブルにエントリを挿入する必要があります。この部分は期待どおりに機能します。
ただし、mysqlテーブルにすでにエントリがある場合、Wordpressはテーブルを更新する必要がありますが、これは機能しません。

これに使用しているコードは次のコードです。

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time=$current_timestamp WHERE userid=$userid"));

このクエリで使用する変数は正しいです。テーブルへの挿入に正常に使用されているためですが、更新関数で問題が発生している途中です。

誰かが私がここで間違っていることを教えてもらえますか?
これを行う正しい方法は何ですか?

7
Gabi Barrientos

timeの値はsingle quoteで囲む必要があります

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid"));
9
John Woo
$result = $wpdb->update('westend_areaofficers', array('officerOrder' => $memberOrder,
'officerTitle' => $memberTitle, 'officerName' => $memberName, 'officerPhone' => 
 $memberPhone), array('officerId' => $memberId), array('%d','%s', '%s', '%s'),
 array('%d'));

if($result > 0){
echo "Successfully Updated";
}
else{
  exit( var_dump( $wpdb->last_query ) );
}
$wpdb->flush();

$ wpbd-> query($ wpbd-> prepare())ステートメントを使用しても、正しい数値と文字列の形式を渡しても機能しなかったため、上記の解決策が私にとってはうまくいきました。
var_dump()関数の目的は、クエリの実行がどこで失敗したかを確認することです。渡されたクエリと値を出力します。もちろん、$ wpdb-> flush()関数を使用すると、次のクエリを実行するためにキャッシュがクリアされます。

3
Marcus
UPDATE wp_options SET option_value = replace(option_value, 'http://www.example.com', 'http://localhost/test-site') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.example.com', 'http://localhost/test-site');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.example.com','http://localhost/test-site');
1
Savan Dholu

例:

ユーザー(IDが546)のnicenameをHarde_Bandeに変更します

$execut= $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->users SET user_nicename = %d WHERE ID = %s", "Harde_Bande", 546 ) );
var_dump($execut);

詳細: http://codex.wordpress.org/Class_Reference/wpdb#Examples

0
T.Todua