Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库更新前在变量内转义单引号_Mysql_Perl - Fatal编程技术网

Mysql 数据库更新前在变量内转义单引号

Mysql 数据库更新前在变量内转义单引号,mysql,perl,Mysql,Perl,这可能是一个非常基本的问题 我有一个变量$name,它是通过html页面的表单输入的。 现在,我必须使用sql查询将这个$name的值更新到数据库表中 如果$name中有单引号,则数据库更新失败。詹姆斯·奥哈拉 当它没有单引号时,更新工作正常 在更新数据库之前,有没有办法在变量中转义这个单引号。? 我不想删掉这一句话。只是想转义它,以便更新顺利进行,并在数据库中更新实际名称 请让我知道。谢谢。一般来说,最好的方法是准备查询并使用占位符。然后将数据传递到数据库以填充准备好的查询 像这样的ORM将自

这可能是一个非常基本的问题

我有一个变量$name,它是通过html页面的表单输入的。 现在,我必须使用sql查询将这个$name的值更新到数据库表中

如果$name中有单引号,则数据库更新失败。詹姆斯·奥哈拉 当它没有单引号时,更新工作正常

在更新数据库之前,有没有办法在变量中转义这个单引号。? 我不想删掉这一句话。只是想转义它,以便更新顺利进行,并在数据库中更新实际名称


请让我知道。谢谢。

一般来说,最好的方法是准备查询并使用占位符。然后将数据传递到数据库以填充准备好的查询

像这样的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);