2016-05-14 9 views
0

私は準備されたPDOステートメントでMySqlのいくつかの行を更新しようとしています。エラーは発生しませんが、行はそのまま残ります。私は間違って何をしていますか?更新mysql、no affection

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- binding-values-for-mysql-in-statement) – mitkosoft

+0

私はIDの数を知らないので、どうすればいいですか? –

答えて

0

$_POST['id']にはカンマの後にスペースがあります。コンマの前後に空白がないようにしてください。

第2に、クエリを準備中に文字列として扱うことができるように、PARAM_STR$stmt->bindParam(':id', $id,PARAM_STR);に追加できます。

またのようなエラーが表示するエラーハンドラを追加します。

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

あなたは、最終的なクエリがecho $stmt->queryString