PHP - 使用邮递员返回成功更新查询但不更新数据库中的值

时间:2017-08-30 07:49:16

标签: php mysql pdo

我已阅读此posthere但尚未找到解决方案

我的功能更新如下:

 public function updateArtist($id, $name, $genre){
 $stmt = $this->con->prepare("UPDATE api SET name = ?, genre = ? WHERE id = ?");
 $stmt->bind_param("sss",$id, $name, $genre);
 if($stmt->execute())
 return true; 
 return false; 
 }

,更新索引为:

 case 'updateartist':
 if(isset($_POST['id']) && isset($_POST['name']) && isset($_POST['genre'])){
 $db = new DbOperation(); 
 if($db->updateArtist($_POST['id'], $_POST['name'], $_POST['genre'])){
 $response['error'] = false;
 $response['message'] = 'Artist updated successfully';
 }else{
 $response['error'] = true;
 $response['message'] = 'Could not update artist';
 }
 }else{
 $response['error'] = true; 
 $response['message'] = 'Required Parameters are missing';
 }
 break; 

我正在使用邮递员尝试,这里是邮递员的输出,显示成功消息:

success

但是当我检查mysql时,值不会改变,

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

绑定参数的顺序必须与查询中的顺序相同 对s使用stringi使用integerd使用decimalb使用blob参数。

public function updateArtist($id, $name, $genre){
    $stmt = $this->con->prepare("UPDATE api SET name = ?, genre = ? WHERE id = ?");
    $stmt->bind_param("ssi", $name, $genre, $id);
    if($stmt->execute())
    return true; 
    return false; 
}

答案 1 :(得分:1)

UPDATE如果没有找到记录,语句也会成功。检查受影响的行数。

您绑定的订单或pastameter是importend。改为:

$stmt = $this->con->prepare("UPDATE api SET name = ?, genre = ? WHERE id = ?");
 $stmt->bind_param("ssi", $name, $genre,$id);

在您的代码中,id将绑定到第一个问号,因此它将绑定到name,依此类推。