[WordPress] ことができます ' t 更新行現在と同じ値であることか。

スポンサーリンク

質問

のようなプロシージャがある私

add_action( 'wp_ajax_case_update', 'case_update' );

function case_update ( )
{
    $id = $_POST['id'];
    $compname = $_POST['compname'];
    $casename = $_POST['casename'];
    $imageurl = $_POST['imageurl'];
    $summary = $_POST['summary'];
    $results = $_POST['results'];

    $thisAction = $_POST['thisAction'];

    $message = "";

    switch ($thisAction)
    {
        case 'add':
        {
            global $wpdb; 
            $message .= $wpdb->query("INSERT INTO cases (compname,casename,imageurl,summary,results) VALUES (" . implode(",", array("'$compname'", "'$casename'", "'$imageurl'", "'$summary'", "'$results'")) . ")")
                       ? 'Successfully added case study ' . $casename . ' to the database.'
                       : 'Error occurred when trying to add case study to database: ' . $wpdb->last_error;
            break;
        }
        case 'delete':
        {
            global $wpdb; 
            $message .= $wpdb->query("DELETE FROM cases WHERE id=" . $id) 
                      ? 'Successfully deleted case study from the database.'
                      : 'Error occurred when trying to delete case study from database: ' . $wpdb->last_error;
            break;
        }
        case 'update':
        {
            global $wpdb;
            $message .= $wpdb->query("UPDATE cases SET compname='$compname',casename='$casename',imageurl='$imageurl',summary='$summary',results='$results' WHERE id=$id")
                      ? 'Successfully updated case study.'
                      : 'Error occurred when trying to update case study in database: ' . $wpdb->last_error;
            break;
        }
        default:
        {
            $message .= 'Didn\'t recognize action.'; 
            break;
        }
    }
    die($message); 
}

と私は私のワードプレスのテーマを構築管理者パネルの多くに、この手順を再利用しました。私はちょうどテスト中に発見、

case 'update'

ブロックは、ユーザーが何らかの理由で同じ値に更新に失敗しています。まさに、問題何を知っている don’t 以来、それが起こるとき、

$wpdb->last_error;

はエラーを印刷ではない、しかし、

説明している誰でもか。どのように修正して?

答え

updated

というタイムスタンプ列をテーブルに追加し、更新された行の 0 以外の値を生成するために、UPDATE ステートメントに、

, updated=now()

を追加します

答え

、query() メソッドの結果を確認する必要があります = = = false。 ワードプレス ドキュメント あたり:

選択の影響を受ける/選択された行の数を示す整数値を返します、挿入、削除、更新、等。作成、変更、切り捨て、削除 SQL ステートメント (ある特定の行ではなくテーブル全体に影響を与える) のこの関数は、成功した場合に TRUE を返します。MySQL のエラーが発生した場合、関数は FALSE を返します。クエリの行、0、FALSE が返される、ためには戻り値をチェックするときに注意する必要がありますに注意してください。比較演算子 (=) を使用して、エラーをチェックする (例えば、false = = = $result) とすべての行が影響を受けたかどうか (例えば、0 = = = $result)。

答え

申し訳ありませんの回答として投稿しているので、まだコメントする特権を持っていません。
ジャスティン の答えは正しいです。
@ 平凡な Web Dev のコメントでのご質問について。

result !== false

を使用する必要。
データ型が同じをこのケースでいるように

http://stackoverflow.com/questions/32080256/cant-update-rows-to-be-the-same-value-as-they-currently-are

スポンサーリンク

Leave a Reply