2017-04-30 12 views
0

xmlから取得する配列にない行を0で更新しようとしています。配列のxmlからmysqlを更新する

$sus = array(); 
foreach($xml->property as $node) { 
$sus[] = $node->suid; 
} 
$A = "'".implode("','",$sus)."'"; 
echo $A; 
$sth = $dbh->prepare("UPDATE tabla SET 
alta = 0 
WHERE suid NOT IN ($A)"); 
$sth->execute($sus); 

私は$ Aをエコーするとき、それは正しく、このようにそれをプリントアウト: 60 ''、 '62'、 '65'、 '73'、 '74'、 '79'、 '83'、」 90 '、' 112 '、' 124 ' 更新は行われません。 何が間違っていますか?あなたは、SQLインジェクションを避けるために、あなたのXML値をエスケープすることから始める必要があり、事前

答えて

0

で ありがとう:

$escapedValues = str_repeat('?,', count($sus) - 1) . '?'; 
$sth = $db->prepare("UPDATE tabla SET alta = 0 WHERE suid NOT IN ($escapedValues)" 
$sth->execute($sus); 
+0

おかげで働いていた、PDOの更新に必要な場所エスケープを知ってdid't。 クエリの名前にバグがあります。 誰にとっても便利な場合の完全なコードは次のとおりです。 $ sus = array(); foreach($ xml->プロパティを$ node){ $ sus [] = $ node-> suid; } $ escapedValues = str_repeat( '?,'、count($ sus) - 1)。 '?'; $ sth = $ dbh-> prepare( "UPDATE tabla SET alta = 0 ここではsuid NOT IN($ escapedValues)"); $ sth-> execute($ sus); – Helenp

+0

素晴らしい!あなたにはうれしいです。ちょうど適切な変数名で私の答えを編集:) – Clorichel

関連する問題