更新数据库时出错

时间:2011-12-28 07:56:55

标签: php mysql

如果我有以下内容:

  

$ common = Amelia的沙子马鞭草

当我尝试进行以下更新时:

$clear=strip_tags($common);
$clear=preg_replace('/[^\w ]/', '', $clear);
$clear=str_replace('  ', '-', $clear);
$clear=str_replace(' ', '-', $clear);
$clear= strtolower($clear);


$sql= "update my_table set sid='$clear' WHERE common= '$common'";
mysql_query($sql) or die("query failed: $sql".mysql_error());

我收到以下错误:

查询失败update my_table set sid='amelias-sand-verbena' WHERE common= 'Amelia's sand verbena'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 's sand verbena'' at line 1

为什么我收到此错误?

4 个答案:

答案 0 :(得分:2)

试试这段代码。

$clear=strip_tags($common);
$clear=preg_replace('/[^\w ]/', '', $clear);
$clear=str_replace('  ', '-', $clear);
$clear=str_replace(' ', '-', $clear);
$clear= strtolower($clear);
$common=str_replace("'", "\'", $common);


$sql= "update my_table set sid='$clear' WHERE common= '$common'";
mysql_query($sql) or die("query failed: $sql".mysql_error());

答案 1 :(得分:1)

单引号字符是SQL语法的一部分。 如果你在其中一个字符串中有它,你必须用另一个单引号来逃避它。 如果你的字符串是:'abc's lalala'它必须成为'abc'的lalala',这是一个非常常见的问题,可能导致SQL注入问题,所以在你的字符串上使用mysql_real_escape_string(),在{{3}查看它}

答案 2 :(得分:0)

首先,你不要strp或转义引号。 其次,您在查询中缺少一个尾随的单引号。

$sql= "update my_table set sid='$clear' WHERE common= '$common'";

答案 3 :(得分:0)

$safe_common = mysql_real_escape_string($common);
$safe_clear = mysql_real_escape_string($clear);
$sql= "update my_table set sid='$clear' WHERE common= '$save_common'";

这就是你所需要的。 现在请阅读http://nl3.php.net/mysql%20real%20escape%20stringhttp://nl3.php.net/manual/en/security.database.sql-injection.php。 :)