Php 更新我的数据库时出错

Php 更新我的数据库时出错,php,mysql,Php,Mysql,如果我有以下资料: $common=阿米莉亚沙马鞭草 当我尝试执行以下更新时: $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

如果我有以下资料:

$common=阿米莉亚沙马鞭草

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

$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());
我得到以下错误:

查询失败
更新我的表集sid='amelias-sand-verbena'其中common='Amelia's sand verbena'您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,以了解在第1行使用near's sand verbena'的正确语法


为什么会出现此错误?

单引号字符是SQL语法的一部分。 如果你在一个字符串中有它,你必须用另一个单引号来转义它。
如果您的字符串是:“abc的拉拉”,那么它必须变成“abc的拉拉”,这是一个非常常见的问题,可能会导致SQL注入问题,因此请在字符串上使用mysql\u real\u escape\u string(),首先,您不需要strp或escape引号。 其次,查询中缺少一个尾随的单引号

$sql= "update my_table set sid='$clear' WHERE common= '$common'";
这正是你需要的。 现在请去读一读。:)

试试这段代码

$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());

这是错误的,
'abc's lalalala
应该根据输出格式变成
abc's lalala
abc's lalalala
。其中明确指出单引号可以写成两个连续的单引号。“应该只在以HTML/XML显示数据时使用,不应该以这种方式保存在数据库中,这是多余的。@fersch抱歉,什么?如果你的意思是轻微的语法错误:谢谢,修复了这个问题。这段代码仍然容易受到SQL注入的攻击,请参阅Yaniro和我的答案。这样做会让你在某个时候被黑客攻击。
$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());