2016-05-16 8 views
1

私のデータベース内の一部のレコードを更新しようとしていますが、このコードは以前は動作していましたが、もはや動作していません。 id変数を固定数に変更した後も、コードは引き続きデータベースに影響しません。エラーは発生していません。UPDATEはレコードにまったく影響しません

<?php 
header('Access-Control-Allow-Origin: *'); 

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']); // $id is a string with ids separated by commas (1,2,3,4 e.t.c.) 
$state = ($_POST['state']); // $state is either 1 or 0. 
$code = ($_POST['fetchCode']); 

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

$stmt->execute(); 

echo json_encode("Done"); 
?> 

私は唯一の状態列を更新する権限を持っているデータベース接続のために使用しているユーザー、それゆえ私は、SQLインジェクションのリスクが表示されません。私はこれについて正しいのでしょうか、私のコードに何が間違っていますか?あなたの質問の後半部分については

+6

[警告リトルボビーテーブル] –

+0

考慮OPはSQLインジェクションは依然として問題であるかどうかを尋ねます制限付きのアクセス許可では完全に役に立たないコメントです... –

+0

'prepared'プリペアドステートメントを使用すると、クエリ文字列内にいくつかのプレースホルダがあり、準備が整った後に' bindParam'が表示されます。 – Alex

答えて

0

...

...私は、SQLインジェクションのリスクが表示されません。私は右のこの程度...

  1. ユーザー権限は、時間の経過とともに変化する傾向があるのです、常に更新する必要があり、これらの権限を利用しどのようなコード覚えていません。
  2. 技術的に明らかにSQLインジェクション攻撃の影響を受けない可能性があるからといって、エンドユーザーにとって有害な経験につながる可能性がある問題はまだあります。たとえば、ある日、新しいfetchCode'のような文字("9focuspoints's New Code"など)を含む可能性があります。これは、エスケープされていないとこれを壊してしまい、苛烈な顧客につながり、深刻な深夜のカスタマーサービスコールにつながる可能性があります。操作。

これは単なる貧弱な形式であり、実際に文を準備するための構文作業のほとんどを既に完了しているので、作業を終了することもできます。


あなたの質問の前の部分のために、私は、あなたがイベントを取り巻く変化があまりにも非常に疑わしいされるべきである:

...このコードは、以前に働いたがISNされていますもう何も...

これは変更されて以来のことはありますか?このコードが変更されていない場合は、ここに投稿するのに多くの助けを得ることになるとは思っていません。確認する質問:

  1. スタンドアロンクライアントで実行するとSQL文は機能しますか?
  2. var_dump変数を使用してトラブルシューティングを行っているときに、期待する値が含まれていますか? (https://xkcd.com/327/)....仮定をしないと、あなたのSQL文で直接未検証の入力を許可しない
+0

ありがとうございます。私が機会を得たときにスタンドアロンのクライアントで実行することができます。奇妙な部分は、コードが動作してから何も変わっていないということです。私はクエリをエコーし​​、すべての変数に正しい値が含まれています。 –

関連する問題