[英]After Update Query Executed Affected rows returning 0 in mysql
我正在嘗試從MySQL表中更新一行。 執行UPDATE
查詢后,MySQL表中將發生UPDATE
。 但是$stmt->affected_rows
返回0
。 為什么返回零?
function updateSignUp($status,$recordId){
$prepareStmt='UPDATE <DBNAME>.<TABLENAME> SET status=? WHERE id=?;';
$mysqli=$this->connectDB(<DBNAME>);#connectDB user written function
if ($stmt=$mysqli->prepare($prepareStmt)){
$stmt->bind_param('ii', $status, $recordId);
if (!$stmt->execute()) {
$stmt->close();
$mysqli->close();
return $this->errormsg('FAILURE!','Staff SignUp cannot Perform at this moment.');#errormsg user written function
}elseif($stmt->affected_rows>0){
$stmt->close();
$mysqli->close();
return $this->errormsg('SUCCESS!','Staff SignUp Done.',2);
}else{
$stmt->close();
$mysqli->close();
return $this->errormsg('WARNING!','Staff SignUp Not Done.',4);
}
}else{ return $this->errormsg('PREPARE FAILED:','(' . $mysqli->errno . ') ' . $mysqli->error); }
}
echo updateSignUp(0,15);
結果顯示:警告! 員工注冊未完成。
預期結果:成功! 員工注冊完成。
注意:
實際表看起來像:
+------------------------+---------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ldapusername | varchar(30) | YES | | NULL | |
| email | varchar(50) | NO | | NULL | |
| firstname | varchar(20) | YES | | NULL | |
| lastname | varchar(20) | YES | | NULL | |
| designation | varchar(30) | YES | | NULL | |
| username | varchar(30) | NO | | NULL | |
| role | int(5) | NO | | NULL | |
| manager | int(11) | NO | | NULL | |
| currency | int(11) | NO | | NULL | |
| country | int(11) | YES | | NULL | |
| payee_id | varchar(50) | YES | | NULL | |
| bank_acc_no | varchar(30) | YES | | NULL | |
| bank_name | varchar(50) | YES | | NULL | |
| bank_branch | varchar(50) | YES | | NULL | |
| bank_swift_code | varchar(30) | YES | | NULL | |
| ext_no | int(10) | YES | | NULL | |
| department | int(5) | NO | | NULL | |
| marital_status | int(5) | NO | | NULL | |
| monthly_limit | decimal(15,2) | YES | | NULL | |
| communication_limit | decimal(15,2) | YES | | NULL | |
| medical_per_bill | decimal(15,2) | YES | | NULL | |
| medical_per_annum | decimal(15,2) | YES | | NULL | |
| medical_cur_year_total | decimal(15,2) | YES | | NULL | |
| dental_per_bill | decimal(15,2) | YES | | NULL | |
| dental_per_annum | decimal(15,2) | YES | | NULL | |
| dental_cur_year_total | decimal(15,2) | YES | | NULL | |
| doj | date | YES | | NULL | |
| status | int(5) | NO | | 2 | |
| members_link_id | int(11) | YES | | NULL | |
| created_on | timestamp | NO | | CURRENT_TIMESTAMP | |
| modified_by | int(10) | YES | | NULL | |
| modified_on | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+------------------------+---------------+------+-----+-------------------+-----------------------------+
您是否用SELECT
語句檢查了要更新的行是否存在,並且在更新之前和之后都有另一個值? 因為當更新前后值相同時,mysql將返回零受影響的行。 看到這個類似的問題 。
編輯:如果要獲取所有行(不僅是實際更改的行),可以嘗試使用連接標志FLAG_FOUND_ROWS
(請參見MYSQL Doc )。
edit2:好的新想法:錯誤可能在if / elseif / else語句中,可能未讀取受影響的行
嘗試:
$success = $stmt->execute();
if(!success) {
$stmt->close();
$mysqli->close();
return $this->errormsg('FAILURE!','Staff SignUp cannot Perform at this moment.');#errormsg user written function
} else {
if($stmt->affected_rows>0) {
$stmt->close();
$mysqli->close();
return $this->errormsg('SUCCESS!','Staff SignUp Done.',2);
} else {
$stmt->close();
$mysqli->close();
return $this->errormsg('WARNING!','Staff SignUp Not Done.',4);
}
}
感謝所有試圖解決我的問題的人。 我正在使用jQuery
AJAX
和bootstrapvalidator
來呈現HTML form
並使用POST
提交表單 。 在另一個項目中模擬了同一問題,並注意到AJAX調用針對單一表單提交觸發了兩次 。
表單提交JS:
.on('success.form.bv', function(e){
e.preventDefault();
var $form = $("#signupapprovalform"), url = $form.attr('action');
$.post(url,$form.serialize()).done(function(dte){ $("#signup-content").html(dte); });
});
解決問題 :我剛剛添加了
e.stopImmediatePropagation();
在e.preventDefault();
旁邊e.preventDefault();
。
實際上,PHP和mysql沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.