2012-03-09 11 views
-1

第一は、私はあなたのクエリをあげる、と私は洙間違っていたり、秀近いかもしれないとして、私は、私が達成しようとしている何を教えてあげましょう。このMySQLアップデートクエリで何が問題になりますか?

 mysql_query("UPDATE link_building SET 
ID=$ID,Site=$Site,Date=$Date,Target_Site=$Target_Site, 
     Target_Contact_Email=$Target_Contact_Email, 
    Target_Contact_Name=$Target_Contact_Name, 
     Link_Type=$Link_Type,Link_Acquired=$Link_Acquired, 
    Notes=$Notes,Link_URL=$Link_URL WHERE ID=" . $ID); 

私は何を達成しようとしていますか? は、私は、変数

("$ID","$Site","$Date","$Target_Site","$Target_Contact_Email","$Target_Contact_Name", 
"$Link_Type","$Link_Acquired","$Notes","$Link_URL") 

しかし、私は唯一のIdが$のIDに等しい玉葉のレコードを更新するに格納された値でlink_buildingテーブルのフィールド

("ID","Site","Date","Target_Site","Target_Contact_Email","Target_Contact_Name", 
    "Link_Type","Link_Acquired","Notes","Link_URL") 

を更新したいです。

UPDATE:私はすべてのエラーが表示されません。 ITSはlink_building.phpにリダイレクトして成功メッセージを表示しますが、MySQLテーブルのデータは変更しません。

+4

あなたはエラーが表示されていますか?もしそうなら、それをあなたの質問に投稿してください。 – Aaron

+0

あなたは何が起こってはいけないと言っていませんでしたが、私は推測しています:あなたは変数を逃していない、それは間違っています。 http://www.php.net/manual/en/function.mysql-real-escape-string.phpを見てください。(長期的には、PDOを使うことを学ぶことでこの問題は完全に回避されます。http://www.php。 net/manual/en/intro.pdo.php) – Piskvor

+0

ちょうどあなたが設定した特定の「ID」を持つ値を探すのはどうですか? –

答えて

3

データをエスケープし、そのすでにあなたの条件であるため、IDの更新を削除してください:

mysql_query("UPDATE link_building SET Site='".mysql_real_escape_string($Site)."',Date='".mysql_real_escape_string($Date)."',Target_Site='".mysql_real_escape_string($Target_Site)."', Target_Contact_Email='".mysql_real_escape_string($Target_Contact_Email)."', Target_Contact_Name='".mysql_real_escape_string($Target_Contact_Name)."', Link_Type='".mysql_real_escape_string($Link_Type)."',Link_Acquired='".mysql_real_escape_string($Link_Acquired)."', Notes='".mysql_real_escape_string($Notes)."',Link_URL='".mysql_real_escape_string($Link_URL)."' WHERE ID=" . intval($ID)); 
+2

また、これらの各変数をmysql_real_escape_string($ var)に設定することをお勧めします。 – RumpRanger

2

あなたの列が(その中にスペースで)Target Siteのような名前が付けられていた場合、あなたはそのようにそれをアドレスすべきですあなたの質問に(バッククォートを追加するように強制します)。また、文字列を格納する列に引用符を追加する必要があります。問い合わせは(:ビットまたはフォーマットがずっと読みやすくなりませんか以外に)動作しない理由、これが解決すべき

UPDATE 
    link_building 
SET 
    ID = $ID, 
    Site = '$Site',     // single quotes for values 
    Date = '$Date',     // ... 
    ´Target Site´ = '$Target_Site' // and ´ for fields 
    [...] 

:あなたのクエリは次のようになります。

あなたはそのことについて与えられた情報をやりなさい、しかし、あなたはそれを使用する前に変数を常にをサニタイズする必要があることに注意してください(あなたのコードは、あなたが行うようには見えない)SQL-注射を避けるために。 mysql_real_escape_stringを使用するか、prepared statementsを使用することをお勧めします。 1については

2

、あなたはまだあなたの文字列を引用符で囲む必要があることを忘れています。

mysql_query("UPDATE link_building SET Site='$Site', Date='$Date',". 
      "Target_Site='$Target_Site', Target_Contact_Email='$Target_Contact_Email',". 
      "Target_Contact_Name='$Target_Contact_Name', Link_Type='$Link_Type',". 
      "Link_Acquired='$Link_Acquired', Notes='$Notes', Link_URL='$Link_URL' ". 
      "WHERE ID=$ID"); 

すべての文字列の周りに'が追加されています。

ボーナス発言。文字列に実際にmysql_real_escape_string()を使用してデータベースに渡す必要があります。

関連する問題