通过Perl在MYSQL中插入字符串

通过Perl在MYSQL中插入字符串,mysql,string,perl,dbi,Mysql,String,Perl,Dbi,我遇到的问题是,我让一个用户输入一个字符串。。。可以小于156个字符,如果字符串中没有撇号或引号,DBI语句将完美地插入字符串 这很好->我在工作! 这没用->我没用 要插入,我使用以下代码: $sth = $dbh->prepare("INSERT INTO table VALUES('$var1','$var2','$var3')"); $sth->execute(); 我知道Perl用“”和“”插入不同的字符串,但我的程序在尝试时抛出了一个错误。我还尝试使用联

我遇到的问题是,我让一个用户输入一个字符串。。。可以小于156个字符,如果字符串中没有撇号或引号,DBI语句将完美地插入字符串

这很好->我在工作! 这没用->我没用

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

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

我知道Perl用“”和“”插入不同的字符串,但我的程序在尝试时抛出了一个错误。我还尝试使用联接,使用“”标记将prepare语句联接在一起。如果需要的话,存储155个字符的变量是$var3,所有3个都是VARCHAR属性。有什么建议吗?

您需要转义变量。

正是这种疏忽,黑客利用它来执行SQL注入攻击:阅读可怜的little的故事。事实上,您确实应该避免使用预先准备好的语句来评估SQL变量:

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

您需要转义变量。

正是这种疏忽,黑客利用它来执行SQL注入攻击:阅读可怜的little的故事。事实上,您确实应该避免使用预先准备好的语句来评估SQL变量:

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

那么$var1是否会取代原来的?当我运行这两行代码时做标记?@JamesBrown:是的,
execute()
的参数将依次替换每个
占位符。啊,你是我的英雄!谢谢你的帮助和提示!那么$var1是否会取代原来的?当我运行这两行代码时做标记?@JamesBrown:是的,
execute()
的参数将依次替换每个
占位符。啊,你是我的英雄!谢谢你的帮助和提示!