2017-04-04 4 views
-1

このコードは動作しないWHERE含まれていません:PHP + MySQLの:更新使用している場合は動作し '&'

UPDATE `test` SET `done`='1' WHERE `name`='x_&_y' 

しかし、これは仕事です:

UPDATE `test` SET `done`='1' WHERE `name`='x_y' 

1値ではなく、最初のコードのコード・リターンの両方仕事やテーブルは更新されません!

enter image description here

PHPコード:

$value = 'x_&_y'; // send by $_GET['value'] 
$value = htmlspecialchars(trim($value),ENT_QUOTES,'UTF-8'); 
UPDATE `league` SET `leagueUpdateDone`='1' WHERE `leagueCountry`='$value'; 
+0

@GurV、はいこれは実際には –

+0

です。エラーをチェックしてください。あなたは "php"とタグ付けされています。 *なぜ?*この質問をサポートするコードはなく、あなたはタイトルに "PHP"を含めています。 –

+0

機密データがある場合はテーブル構造とコンテンツを見ることができますか?それを隠す –

答えて

1

問題は、あなたがあなたのクエリが間違って実行しているです。物事にマッチさせようとしている場合は、決してhtmlspecialcharsを入力に使用しないでください。 &はHTMLの予約文字です。になります。最終的なクエリがどのように見える

'x_&_y' 

代わりにプレースホルダとプリペアドステートメントを使用してこのように、値:

$stmt = $db->prepare('UPDATE `league` SET `leagueUpdateDone`='1' WHERE `leagueCountry`=?'); 

そして、その反対の値をバインドします。この手順は、mysqliまたはPDOの使用に基づいて実装が異なります。

注:htmlspecialcharsです。はHTMLの表示に使用されます。データベース内のコンテンツをできるだけ中立に保ち、事前にエスケープしないでください。データベース内のすべてを未処理として処理し、使用されているコンテキスト(JSON、HTML、電子メールなど)でエスケープしたい場合があります。あなたがそれを取り消してJSONのためにそれをやり直す必要があるならば、人生を非常に醜いものにすることができると思うなら、それはHTMLです。

あなたはそのhtmlspecialchars技術を学んだ私は知りませんが、それは、これは呪文は、その目的を十分に理解されずに使用されているcargo cult programmingである可能性が高いです。これは、多くのYouTubeチュートリアルタイプのトレーニングで共通の問題です。コードであなたを溺れさせますが、理論的な基礎や実際の説明の仕方はほとんどありません。

私はここであなたを熱心にしていないようにしようと努力していますが、使用しているコードを理解することが重要です。少し深く掘り下げて、使用しているメソッドに関するドキュメントを参照してください。 PHPには、誤解を明確にするのに役立つ人々のコメントセクションがある素晴らしいマニュアルがあります。

+0

ありがとう、私はXSSのバグを無視するためにhtmlspecialcharsを使用します。 –

+0

@MyName使用することは重要ですが、適切な時間にそれを使用することが重要です。正しい場所に。 – tadman

+0

もちろん、どうもありがとう –

関連する問題