2010-12-26 4 views
0

ご覧のとおり、変数を挿入するクエリがあります。 構文に何が問題なのですか?MySQLクエリで変数を挿入する

$query = "UPDATE house SET epname=".$newtitle" WHERE epid= ".$epid; 
+2

初心者によくある間違いには、 '「UPDATE家のような文字列を引用符で囲む必要がありますSET epname = '"。$ newtitle。"'どこのepid = "。(int)$ epid;'、もちろんそれをエスケープする必要があります – ajreal

+0

@ ajreal-Thanks!そして再びあなたは救助に来る:) – t0mgs

+0

最後に、PHPとmysqlの2つの構文エラーがあることを理解しましたか? –

答えて

2

変数の文字列はありますか? MySQLクエリの目的のために引用符で囲みたいと思うでしょう。

また、$ newtitleの後に連結演算子(ピリオド)がありません。

あなたは$クエリの値をエコーし​​た場合、エラーが表示されるはずです。

UPDATE house SET epname=[value of newtitle] WHERE epid= [value of $epid] 

はそのepnameを仮定がchar/varchar型の値であり、かつEPIDはある種の整数であり、あなたはおそらくしたいですこの操作を行います。

$query = "UPDATE house SET epname = '" . mysql_real_escape_string($newtitle) . "' WHERE epid= " . $epid; 

あなたは、文字列の周りにmysql_escape_string機能を使用しない場合は、SQLインジェクション攻撃に対して脆弱である

+0

ありがとうTehShrike!魅力のように動作します。 – t0mgs

+0

LOL!あなたは注射について話していますが、まだ$ epid nakedを残しています! –

+0

@Col。 Shrapnel:はい、私は$ epidが整数(コード内)であるという前提を作っていると言いました。個人的には、それをintval()呼び出しで囲んで確実に記述します。 – TehShrike

0
$query = "UPDATE house SET epname=".$newtitle" WHERE epid= ".$epid; 

$query = "UPDATE house SET epname=".$newtitle." WHERE epid= ".$epid; 

またはより良い

$query = "UPDATE house SET epname= $newtitle WHERE epid= $epid"; 
+0

注入に関する警告やエスケープやプリペアドステートメントを使用しないで、このアプローチは、Stackoverflowの答えではありません。 – Konerak

+0

彼は彼のコードをどうやって間違っているか尋ねました。たぶん私はまた、あなたがこの正しいと考えるためにMySQLの注入やxssについて話す必要がありますが、実際には私の答えはそのような質問の正確な返信です。 – Spyros

+0

@ SpyrosP-ありがとう! @ Konerak-私は自分のコードを確実にすることの重要性を理解していますが、私が今やっていることのためには、学習していなくても十分です。しかし、私はいくつかの深刻な開発に入る前にセキュリティについて学ぶことを考慮に入れます。 – t0mgs

3

あるべき基本的な構文エラーは、次のとおりです。

…e=".$newtitle" W… 
      ^^ 

あなたたちの場合SQL文を作成するために文字列を一緒にバッシングする方法を説明します。次に、二重引用符が補間されるという事実を利用する必要があります。これにより、はるかに読みやすいコードになります。

$query = "UPDATE house SET epname=$newtitle WHERE epid=$epid"; 

しかし文字列バッシングのアプローチが欠陥があります。 prepared statements(好ましくはPDOを使用)を使用すると、SQLインジェクションの脆弱性を作成するのが難しくなり、(おそらく)読みやすくなります。

+0

こんにちはデビッド - ありがとう、それを確認してください。PDOとPEAR-> DBの違いについて簡単に説明できますか? – t0mgs

関連する問題