我有一个类似
的程序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;
在发生错误时并未打印任何错误,因此我并不确切知道问题所在。
有人有解释吗?我该如何解决?
答案 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
。
在这种情况下,数据类型必须相同。