1

我有一个网站,用户输入一个标题。我希望标题能够使用任何标点符号。我的问题是生病有一个查询:

"INSERT INTO table(title, body) VALUES ('$title','$body')";

其中 $title 和 $body 是 GET 变量。当我在标题中加上引号时会发生什么,它就像结束字符串并创建无效的 sql 查询一样。说我有

$title = "I'm entering a title";
"INSERT INTO table(title, body) VALUES ('$title','$body')";
//"INSERT INTO table(title, body) VALUES ('I'm entering a title','$body')";

它结束了字符串。我尝试使用所有双引号和转义字符,但没有。有谁知道解决方案?

4

6 回答 6

1

您的查询很容易受到攻击,SQL Injection但使用 PHP 的PDOMySQLi可以帮助您解决该问题(也允许您在数据库中插入单引号),请阅读下面的文章

于 2012-11-26T05:52:00.520 回答
1

在将数据输入数据库和从数据库输出时使用这两个功能。

/****************************************/
/* Encode special chars                 */
/*                                      */
/****************************************/

function DBin($string) 
{
    return  trim(htmlspecialchars($string,ENT_QUOTES));
}

/****************************************/
/* Decode special chars                 */
/*                                      */
/****************************************/

function DBout($string) 
{
    $string = trim($string);
    return htmlspecialchars_decode($string,ENT_QUOTES);
}
于 2012-11-26T05:55:36.267 回答
0

您应该首先通过 PHP 清理变量,然后通过 PDO 或 MySQLi 将它们发送干净...

于 2012-11-26T05:54:08.850 回答
0

你可以试试这个php函数..

mysql_real_escape_string

    $title1       = "I'm entering a title";
    $title        = mysqli_real_escape_string($title1);
    "INSERT INTO table(title, body) VALUES ('$title','$body')";

试试这个,希望对你有帮助...

于 2012-11-26T05:58:04.947 回答
0

你需要mysqli_real_escape_string你的SQL。

于 2012-11-26T06:00:17.883 回答
0

这种情况已经有一个内置的方法......看看mysql_escape_string方法......看下面的代码......

$title = "I'm entering a title";
$title = mysql_escape_string( $title );
// $title === I\'m entering a title
"INSERT INTO table(title, body) VALUES ('$title','$body')";
// "INSERT INTO table(title, body) VALUES ('I\'m entering a title','$body')";
于 2012-11-26T06:04:32.703 回答