这可能是一个非常基本的问题。
我有一个变量$ name,它是通过html页面中的表单输入的。 现在我必须使用sql查询将此$ name的值更新到数据库表中。
当$ name中包含单引号时,数据库更新失败。例如。詹姆斯奥哈拉 当它没有单引号时,更新工作正常。
在更新数据库之前,有没有办法在变量中转义这个单引号。 我不想剥去单引号。只是想逃避它,所以更新通过精细,实际名称在数据库中更新。
请告诉我。感谢。
答案 0 :(得分:5)
通常,最好的方法是准备查询并使用占位符。然后将数据传递给数据库以填充准备好的查询。
DBIx::Class之类的ORM会自动为您执行此操作。
如果您直接使用DBI,那么您可以执行something like this:
$sth = $dbh->prepare("SELECT * FROM users WHERE email = ?");
foreach my $email (@emails) {
$sth->execute($email);
$row = $sth->fetchrow_hashref;
[...]
}
答案 1 :(得分:-1)
使用提供的引用功能
$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可以更好地优化查询,更好地了解表达式的类型)。