0

我遇到的问题是我有一个用户输入了一个字符串......可以是任何少于 156 个字符的字符,如果字符串中没有撇号或引号,则 DBI 语句会完美地插入字符串。

这很好用-> 我在工作!这不起作用->我不工作!

要插入,我使用以下代码:

    $sth = $dbh->prepare("INSERT INTO table VALUES('$var1','$var2','$var3')");
    $sth->execute();

我知道 Perl 用 ' ' 和 " " 插入不同的字符串,但是当我尝试这样做时,我的程序会抛出一个合适的结果。我也尝试过使用“”标记将准备语句连接在一起。如果重要的话,存储 155 个字符的变量是 $var3,并且所有 3 个都是 VARCHAR 属性。有什么建议么?

4

1 回答 1

6

您需要转义变量。

黑客利用这种疏忽来执行 SQL 注入攻击:阅读可怜的小Bobby Tables的故事。事实上,你真的应该避免通过参数化你准备好的语句来评估你的 SQL 变量

$sth = $dbh->prepare('INSERT INTO table VALUES(?, ?, ?)');
$sth->execute($var1, $var2, $var3);
于 2012-10-14T23:01:31.007 回答