当Bind_param()具有UPDATE语句时,列数与第1行的值计数不匹配

时间:2017-08-30 12:41:01

标签: php mysql

这是我的代码:

public function deletePost($postId,$userId){
    $stmt = $this->conn->prepare("UPDATE post SET active_status = ? ,modified_by =? ,modified_time=? WHERE post_id=?");
    $notActivePost = 0;
    $currentTime = $this->getCurrentTime();
    $stmt->bind_param("ssss",$notActivePost,$userId,$currentTime,$postId);
    $res = $stmt->execute();
    var_dump($notActivePost,$currentTime,$postId,$userId);
    var_dump($stmt->error_list);
    return $res;
}

我检查了所有正确变量的值,如下所示:

$notActivePost = 0 //I tried this also $notActivePost = "0",also not work
$currentTime = 2017-08-30 20:34:05
$postId = 606
$userId = 56 

但我一直收到这个错误

  

列数与第1行的值计数不匹配

我检查所有关于这个错误的问题是因为查询中的列号与变量绑定的数量不一样,但正如你所看到的那样是查询中的4列,而4个变量是我绑定的。所以我真的不喜欢&# 39;不知道这里发生了什么。

有人可以帮忙吗?因为我已经尝试了很多方法..tq

修改

我在localhost中尝试了同样的代码一切顺利。但是这段代码在live server中运行,会产生错误。

2 个答案:

答案 0 :(得分:1)

如果字段的类型为integer,则需要传递i。从integer类型开始考虑active_status,modified_by和post_id

ssss更改为iisi

public function deletePost($postId,$userId){
    $stmt = $this->conn->prepare("UPDATE post SET active_status = ? ,modified_by =? ,modified_time=? WHERE post_id=?");
    $notActivePost = 0;
    $currentTime = $this->getCurrentTime();
    $stmt->bind_param("iisi",$notActivePost,$userId,$currentTime,$postId);
    $res = $stmt->execute();
    var_dump($stmt->error_list);
    return $res;
}

答案 1 :(得分:0)

经过10多个小时才弄明白问题是什么,最后我解决了。它实际上是由表的触发而不是查询本身引起的。数据计数的数量与要插入的列不匹配导致此错误的触发器

  

列数与第1行的值计数不匹配

希望可以帮助未来的读者解决这个问题。我建议如果查询都是正确的,但仍然会产生这个错误,只需检查你的表的触发器。