2017-08-30 55 views
2

值我讀過這個posthere但尚未找到解決辦法更新查詢PHP - 使用郵遞員返回成功,但不更新數據庫

我已經更新的功能是這樣的:

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的,價值不改變,

做我失去了一些東西?

+0

如果沒有找到記錄,UPDATE語句也會成功。檢查受影響的行數 – Jens

+0

@Jens我已檢查受影響的行數,但仍顯示舊值 – Flix

+1

而且我猜受影響的行數是0,爲什麼你可以在我的答案中閱讀 – Jens

回答

2

綁定參數的順序必須與查詢中的順序相同。
使用sstringiintegerddecimalbblob而結合的參數。

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

好信息先生,我真的很想知道'''裏面的'char'是什麼意思+1,但是我不知道爲什麼時候我沒有更改''sss「'腳本仍然更新值 – Flix

+0

*爲什麼當我沒有更改」sss「腳本仍然更新值*,因爲mysql會自動將字符串轉換爲int。就像你寫'where id ='1''一樣 – Jens

1

UPDATE如果沒有找到記錄,語句也會成功。檢查受影響的行數。

您綁定的訂單或過去的商品是importend。更改爲:

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

在你的代碼的ID會被綁定到第一個問號,所以它是結合name等。

+0

雖然它不是'無論你將字段放在哪裏,所以我需要按順序插入參數。謝謝,* __我現在不能標記爲答案__ * – Flix

+0

因爲你的聲望比@Spectarion高得多,我想我會給他印記,:),無論如何感謝 – Flix

+1

@RedRiver你不應該看聲望你應該考慮哪個答案更有幫助..但無論如何它沒事 – Jens

相關問題