查询mysql数据库时允许哪些字符?

时间:2009-11-20 16:19:30

标签: php sql mysql

我有一个表单中的textarea,当我在其中输入特殊字符时,我在mysql中收到错误。 (将表单提交到执行插入mysql工作的php文件时)

我需要确切地知道哪些字符是不允许的,或者更容易,哪些字符是允许的,这样我才能在提交之前验证textarea。

有人知道吗?

我试过 mysql_real_escape_string()但没有帮助...

注意:在textarea中,用户应该输入一些特殊的字符:

 + , . ; : - _ space & % ! ? = # * ½ @ / \ [ ] ' " < > £ $ €

可能得到了所有......

我该怎么做?

由于

UDPATE

我的mysql_query:

mysql_query("INSERT INTO cars_db (description) VALUES ('$ad_text')");

更新

Mysql错误:

    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 'a"a!a?aa+a-a_a
a/a\a[a]a}a{a&a%a#a@a¨a^a*a*aa,a.a:a;a|a½a
§a' at line 1

4 个答案:

答案 0 :(得分:5)

数据库列在技术上可以容纳任何这些字符。问题是您没有在查询中正确转义它们。

使用mysql_real_escape_string执行此操作的一种方法如下:

$sql=sprintf("insert into cars_db (description) values ('%s')",
    mysql_real_escape_string($_POST['description']) );

//execute query and show errors that result...
$result = mysql_query($sql);
if (!$result) {
    die("Oops:<br>$sql<br>".mysql_error());
}

另一种方法是使用像PDO或ADODb这样的库,这样可以更容易地使用带占位符的预准备语句。这些库可确保正确转义注入查询的数据。

这是一种很好的做法,不仅因为它解决了您的问题,而且还提高了代码的安全性,因为执行SQL注入攻击变得更加困难。

答案 1 :(得分:4)

另一种方法是使用预准备语句。这样可以确保无法进行SQL注入。

答案 2 :(得分:0)

这样做:

$ad_text = mysql_real_escape_string($ad_text);
mysql_query("INSERT INTO cars_db (description) VALUES ('$ad_text')");

阅读mysql_real_escape_string和SQL注入。这是您应用程序中的一个巨大安全漏洞。

http://us.php.net/mysql_real_escape_string

答案 3 :(得分:0)

为什么不使用传入的String参数创建存储过程,而不是转义字符以避免查询。只需传递表单变量的值(或将其保存为字符串)并将其传递给存储过程。