0

誰かが間違っていることを教えてください。私はフォームを持っていて、データをテキストとしてmysqlに挿入していますが、アポストロフィなどを入力すると\が入ります。

mysql で特殊文字を許可する方法を誰かが推奨できますか?

ここに私のHTMLフォームがあります:

<form action="includes/changebio.php" method="post" id="form1">         
 <textarea id="bio" textarea name="bio" data-id="bio" maxlength="710"><?php echo htmlspecialchars($profile['bio']); ?></textarea>
<input type="image" src="assets/img/icons/save-edit.png"class="bio-submit" name="submit" value="submit" id="submit"/>
</form>

私のmysqlステートメント:

<?php
require('_config/connection.php');
?>
<?php 
session_start();
include '_config/connection.php'; 
$bio = $_POST['bio'];
$result = mysql_query("SELECT bio FROM ptb_profiles WHERE id=".$_SESSION['user_id']."");
if(!$result) 
{ 
echo "The username you entered does not exist"; 
} 
else 
if($bio!= mysql_result($result, 0)) 
{ 
echo ""; 
    $sql=mysql_query("UPDATE ptb_profiles SET bio ='".addslashes($bio)."' WHERE id=".$_SESSION['user_id'].""); 
}
    if($sql) 
    { 
header("Location: {$_SERVER['HTTP_REFERER']}");
}
?>
4

4 に答える 4

1

文字列を保存するために、アポストロフィは正常です。クエリが途中にあると想像してください'。エラーの原因となるようなwhere name = 'your's'ものになります。

あなたができることは、データを取得するときです。コード\に追加することで削除できますstripslashes($mystring);

于 2013-02-15T08:52:39.230 に答える
0

Mysql データベースに特殊文字を挿入する場合は、Unicode 形式を使用します。テーブルの照合を utf8_unicode_ci に設定します。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />html ファイルの head に追加します。

データベース接続には次のコードを使用します。

define('HOSTNAME', 'localhost');
define('USERNAME', 'user_name');
define('PASSWORD', 'password');
define('DATABASE', 'database_name');

$dbcon= mysql_connect(HOSTNAME, USERNAME, PASSWORD); 
mysql_query("SET character_set_results=utf8", $dbcon);
mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_select_db(DATABASE, $dbcon);
mysql_query("set names 'utf8'",$dbcon); 
mysql_query("SET character_set_client=utf8", $dbcon);
mysql_query("SET character_set_connection=utf8", $dbcon); 
mysql_query("SET character_set_results=utf8", $dbcon);

詳細については、次のリンクを確認してください。あなたにとって役立つかもしれません..

http://www.oyecoder.com/2013/02/store-any-language-data-in-your-mysql.html

于 2013-02-15T09:03:29.270 に答える
0

2つのこと。

1) 誰かが mysql_* 関数の使用をやめ、代わりに PDO を使用するように言うでしょう。これは実際にあなたをかなり助けるかもしれません. 2) 追加スラッシュは、特殊文字の挿入と SQL インジェクションの防止を支援するためにあります。これを完全に達成できると確信しています。使用すべき予防策がたくさんあります。

正直なところ、準備済みステートメントなどを使用して PDO の方法に切り替えたいと思います。これにより、失敗の可能性が減り、信頼性が向上します。この種の問題を修正するために、addslashes が必要ないことに気付くかもしれません。

于 2013-02-15T08:51:03.697 に答える
0

なぜadslashes()関数を使用するのですか? たとえば、SQLインジェクションを防ぐためですか?代わりに
標準関数を使用してください。mysql_real_escape_string()それは安全で、問題を解決します。
心に留めておいてください、それはあなたが使用している拡張機能とは関係ありませんPDO.

于 2013-02-15T08:58:32.973 に答える