• ベストアンサー

MySqlに、\'の2つを含む文字を登録できません

PHP5.2 MySql5.1.34 文字コードSJIS \' の2つを含む文字を登録できません。 /".!% は登録できます。 <?php if(!$_POST['mes']){ print <<< html ブログ記事を投稿 <form action="$PHP_SELF" method="post"> <table border="1"> <tr> <td>日付</td> <td> <textarea rows="3" cols="20" name="created_at"></textarea> </td> </tr> <tr> <td>タイトル</td> <td> <textarea rows="3" cols="40" name="mes"></textarea> </td> </tr> <tr> <td>URL</td> <td> <textarea rows="3" cols="60" name="url"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="書き込む"> </td> </tr> </table> </form> html; }else{ $dbcon = mysql_connect("サーバ","ユーザ名","パスワード"); mysql_set_charset("sjis",$dbcon); mysql_select_db("データベース名"); $today = date("Y/m/d H:i:s"); $created_at = str_replace("\r\n", "", $_POST['created_at']); $mes = str_replace("\r\n", "", $_POST['mes']); $url = str_replace("\r\n", "", $_POST['url']); $sql_mes = "insert into message(updated_at,created_at,mes,url) values('" . $today . "','" . $created_at . "','" . $mes . "','" . $url . "')"; $result_mes = mysql_query($sql_mes); mysql_close($dbcon); print "記事の投稿が完了しました。<br>"; } ?>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

登録時にエスケープしましょうね。 http://www.php.net/manual/ja/function.mysql-real-escape-string.php シングルクォーテーション、\は、MySQLで利用される文字なので、 ちゃんとエスケープしてあげないと登録ができないだけではなく、 データ破壊や盗難に繋がります。

wai-girl
質問者

お礼

naktak様 回答をありがとうございます。 mysql_real_escape_string を使い解決できました。

すると、全ての回答が全文表示されます。

関連するQ&A