Mysql 数据库更新前在变量内转义单引号
这可能是一个非常基本的问题 我有一个变量$name,它是通过html页面的表单输入的。 现在,我必须使用sql查询将这个$name的值更新到数据库表中 如果$name中有单引号,则数据库更新失败。詹姆斯·奥哈拉 当它没有单引号时,更新工作正常 在更新数据库之前,有没有办法在变量中转义这个单引号。? 我不想删掉这一句话。只是想转义它,以便更新顺利进行,并在数据库中更新实际名称Mysql 数据库更新前在变量内转义单引号,mysql,perl,Mysql,Perl,这可能是一个非常基本的问题 我有一个变量$name,它是通过html页面的表单输入的。 现在,我必须使用sql查询将这个$name的值更新到数据库表中 如果$name中有单引号,则数据库更新失败。詹姆斯·奥哈拉 当它没有单引号时,更新工作正常 在更新数据库之前,有没有办法在变量中转义这个单引号。? 我不想删掉这一句话。只是想转义它,以便更新顺利进行,并在数据库中更新实际名称 请让我知道。谢谢。一般来说,最好的方法是准备查询并使用占位符。然后将数据传递到数据库以填充准备好的查询 像这样的ORM将自
请让我知道。谢谢。一般来说,最好的方法是准备查询并使用占位符。然后将数据传递到数据库以填充准备好的查询 像这样的ORM将自动为您执行此操作 如果您直接使用DBI,则应执行以下操作:
使用提供的报价功能
$dbh->do("
UPDATE `MyTable`
SET `MyField` = ".$dbh->quote($my_value)."
WHERE `id` = ".$dbh->quote($id)."
");
或者使用占位符
my $sth = $dbh->prepare("
UPDATE `MyTable`
SET `MyField` = ?
WHERE `id` = ?
");
$sth->execute($my_value, $id);
后者更漂亮,但在某些情况下,前者可以更快,因为DB可以提前更好地了解表达式的类型,从而优化查询。占位符还具有保护查询免受SQL注入攻击的额外好处。
my $sth = $dbh->prepare("
UPDATE `MyTable`
SET `MyField` = ?
WHERE `id` = ?
");
$sth->execute($my_value, $id);