Mysqlエントリがすでに存在するかどうかを確認するWordpressのプラグインを書いています。
存在しない場合Wordpressはテーブルにエントリを挿入する必要があります。この部分は期待どおりに機能します。
ただし、mysqlテーブルにすでにエントリがある場合、Wordpressはテーブルを更新する必要がありますが、これは機能しません。
これに使用しているコードは次のコードです。
$wpdb->query($wpdb->prepare("UPDATE $table_name SET time=$current_timestamp WHERE userid=$userid"));
このクエリで使用する変数は正しいです。テーブルへの挿入に正常に使用されているためですが、更新関数で問題が発生している途中です。
誰かが私がここで間違っていることを教えてもらえますか?
これを行う正しい方法は何ですか?
列time
の値はsingle quote
で囲む必要があります
$wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid"));
$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()関数を使用すると、次のクエリを実行するためにキャッシュがクリアされます。
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');
例:
ユーザー(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