2016-05-14 84 views
0

我試圖用準備好的PDO語句更新MySql中的行數。它不發出任何錯誤,但行保持不變。我究竟做錯了什麼?更新mysql,沒有感情

爲了安全起見,在Stack Overflow上發佈時,我用xxx替換了用戶名,密碼和數據庫名稱。

<?php 
header('Access-Control-Allow-Origin: *'); 
$jsonp = false; 

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$db = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', 'xxx', 'xxx'); 

$party = ($_POST['party']); 
$id = ($_POST['id']); /* String with ids. Ex. "1, 2, 3" */ 
$state = ($_POST['state']); 
$code = ($_POST['fetchCode']); 

$stmt = $db->prepare("UPDATE wishes SET state = :state WHERE fetchCode = :code AND partyID = :party AND id IN (:id)"); 

$stmt->bindParam(':party', $party); 
$stmt->bindParam(':id', $id); 
$stmt->bindParam(':state', $state); 
$stmt->bindParam(':code', $code); 

$stmt->execute(); 

echo json_encode("Done"); 
?> 
+0

您不能綁定準備好最後的查詢這樣的'IN'子句的值。每個值都應該單獨綁定,即:'IN(:id1,:id2,:id3)' –

+1

[MySQL IN聲明中PDO綁定值的可能重複項](http://stackoverflow.com/questions/1586587/pdo-綁定值爲MySQL的聲明) – mitkosoft

+0

好吧,但由於我不知道ID的數量,我該怎麼做呢? –

回答

0

在您的$_POST['id']逗號後有空格。請儘量避免逗號前後的空格。

其次,您可以將第三個參數PARAM_STR添加到$stmt->bindParam(':id', $id,PARAM_STR);,以便在準備查詢時可以將其視爲字符串。

同時添加錯誤處理程序看到類似的錯誤:

if (!$stmt) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($db->errorInfo()); 
} 

的最後一件事,可以在調試的幫助,你可以看到什麼是過得去echo $stmt->queryString