2

フォーラムでユーザーのアクティビティを試すコードを作成し、この行を追加すると

$cat_id = $db->fetch("SELECT name FROM " . $prefix . "_categories WHERE id =" . mysql_real_escape_string($forum_data['cat_id']));
$page_title_pro = ' > ' . $system->present($cat_id['name']) . ' > ' . $system->present($forum_data['name']) . '';

私は得る

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Treasures > Contests' WHERE id = '2'' at line 1

2 が私のユーザー ID であると想定しています。フッターには次のように表示されます。

$db->query("UPDATE accounts SET flocation = '$session_location', page = '$page_title_pro'  WHERE id = '$id';");

エラーが見つからないようで、cat_id を取り出すとすべて正常に戻りますが、現在のアクティビティをプロファイルに使用できません。助言がありますか?

4

2 に答える 2

5

更新構文に問題はありません。問題は、単一引用符を含む特定の列に設定する値にあり、更新構文が壊れます。値をクエリに渡す前に、単一引用符をエスケープする必要があります。1つの可能な方法は、

mysql_real_escape_string

$val1 = mysql_real_escape_string($session_location);
$val2 = mysql_real_escape_string($page_title_pro);
$val3 = mysql_real_escape_string($id);
$db->query("UPDATE accounts SET flocation = '$val1', page = '$val2'  WHERE id = '$val3'");

もう1つ(優先するもの)は、PreparedStatementsPDOまたはMySQLi拡張機能)を使用することで、値を一重引用符で囲むことを取り除くことができます。

于 2013-03-16T03:28:06.087 に答える
3

mysql_real_escape_string Update クエリの入力値で、 '$page_title_proが含まれる前のクエリからのものです。

于 2013-03-16T03:22:28.097 に答える