不能将行更新为与当前值相同的值吗?

时间:2015-08-18 18:39:27

标签: php mysql sql wordpress

我有一个类似

的程序
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); 
}

我已经在我的WordPress主题中构建的许多管理面板中重复使用此过程。我在测试期间发现的是,当用户出于某种原因更新到相同的值时,case 'update'块失败。但由于$wpdb->last_error;在发生错误时并未打印任何错误,因此我并不确切知道问题所在。

有人有解释吗?我该如何解决?

3 个答案:

答案 0 :(得分:1)

向表中添加名为updated的时间戳列,并在UPDATE语句中添加, updated=now(),以便为更新的行生成非零值。

答案 1 :(得分:1)

您需要检查query()结果是否为= false。根据{{​​3}}:

  

此函数返回一个整数值,表示SELECT,INSERT,DELETE,UPDATE等受影响/选择的行数。对于CREATE,ALTER,TRUNCATE和DROP SQL语句(影响整个表而不是特定行)函数成功返回TRUE。如果遇到MySQL错误,该函数将返回FALSE。请注意,由于可以为行查询返回0和FALSE,因此在检查返回值时应该小心。使用标识运算符(===)检查错误(例如,false === $ result),以及是否有任何行受到影响(例如,0 === $ result)。

答案 2 :(得分:0)

抱歉,暂无权发表评论,所以必须发帖作为答案。 Justin 的回答是正确的。 @ 平庸网络开发关于您在评论中提出的问题。你必须使用 result !== false。 在这种情况下,数据类型必须相同。