【发布时间】:2011-03-10 09:34:25
【问题描述】:
我正在创建一个 CGI 表单来更新 Sybase 存储过程。
qq {execute procedure test(123,45,date,'$note');};
$note 变量是从包含故障单日志信息的文本框中获得的信息。因此,输入此类信息的人可以并且很可能会使用特殊字符,例如 '|"{} 等。我很想知道是否有办法通过变量 $note 将这些信息输入数据库。
我的大部分研究都产生了 DBI->quote() 函数,但它们似乎不起作用,而且我不确定它们的相关性,因为这是一个存储过程。
现在我正在尝试以下方法:
use DBI; <br>$livedb = DBI->connect("dbi:Sybase:server=test","admin","pass") || die "could not connect to live DB, $DBI::errstr"; <br>$note = "testing special characters:"; <br>$livedb->do(qq {execute procedure jinsert(5304905,65,getdate,?);},undef,(param('$note')));
我收到以下错误:
Undefined subroutine &main::param called at test.cgi line 11.
当我使用以下方法时,如果$note 中存在',则代码将失败:
$qy = $livedb->prepare($note);
$qy->execute($test) || die "could not journal: $DBI::errstr";
$qy->finish();
【问题讨论】:
-
能否包含用于与数据库句柄对话的代码(即 DBI 调用)。
-
现在我正在尝试以下操作:
$livedb = DBI->connect("dbi:Sybase:server=test","admin","pass") || die "无法连接到实时数据库,$DBI::errstr"; $note = "测试特殊字符:"; $livedb->do(qq {执行过程 jinsert(5304905,65,getdate,?);},undef,(param('$note')));我得到以下错误:未定义在 test.cgi 第 11 行调用子例程 &main::param。 -
param 是来自 CGI 包的方法。您必须“使用”它并实例化。
-
@mose:请将该代码编辑到您的问题中,以便您可以使用正确的格式等。
标签: perl cgi special-characters quotes