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

为了保存您的字符串,撇号是正常的。并避免 sql 注入想象您的查询'在中间有一个。这将类似于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文件头中。

使用以下代码进行数据库连接。

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

你为什么使用adslashes()函数?例如是为了防止 SQL 注入吗?
改用标准功能mysql_real_escape_string()。它是安全的,可以解决问题。
请记住,它与您使用的扩展无关,例如有些人说使用PDO扩展

于 2013-02-15T08:58:32.973 回答
0

2 件事。

1) 有人会告诉你停止使用 mysql_* 函数并改用 PDO。这实际上可能对您有很大帮助。2) 添加斜杠有助于插入特殊字符和防止 SQL 注入。我肯定会完全实现这一点,您应该使用一整套预防措施。

老实说,我会使用准备好的语句等切换到 PDO 方式。这将减少失败的可能性并提高可靠性。您可能会发现不需要添加斜杠来解决此类问题。

于 2013-02-15T08:51:03.697 回答