我有一个PHP文件,它将从RSS提要中提取数据并将其插入数据库。通常我用自定义函数包装每个字段以替换引号但不再需要它(因为需求的变化)。出于某种原因,当我使用下面的逻辑时,我得到一个错误"错误oci_bind_by_name():用于绑定的无效变量"但如果我在自定义函数中包装每个字段,如下所示:
$guid = customfunction($item->guid);
它有效,为什么?
谢谢
foreach($rss->channel->item as $item) {
print '<a href="'.$item->link.'">'.$item->title.'</a><br />';
$guid = $item->guid;
$title = $item->title;
$link = $item->link;
$pubDate = $item->pubDate;
$description = $item->description;
$content = $item->content;
$stid = oci_parse($spConn,"INSERT INTO table123
(sku, title, link, pubDate, field1, field2)
VALUES(:guid_bv, :title_bv, :link_bv, :pubDate_bv, :description_bv, :content_bv)");
oci_bind_by_name($stid, ":guid_bv", $guid);
oci_bind_by_name($stid, ":title_bv", $title);
oci_bind_by_name($stid, ":link_bv", $link);
oci_bind_by_name($stid, ":pubDate_bv", $pubDate);
oci_bind_by_name($stid, ":description_bv", $description);
oci_bind_by_name($stid, ":content_bv", $content);
oci_execute($stid);
答案 0 :(得分:0)
默认情况下,oci_bind_by_name()仅需要3个参数,并将绑定的所有变量视为字符。但是,它适用于大多数情况,但如果您尝试添加浮点数,二进制数据或整数,它可能会尖叫您并抱怨使用的无效变量。要解决此问题,您需要为oci_bind_by_name提供另一组参数,例如:
if(is_numeric($v2)){
oci_bind_by_name($stmth, $bvar, $v2, 8, OCI_B_INT);
}else{
$v2 = (string) $v2;
oci_bind_by_name($stmth, $bvar, $v2, -1, SQLT_CHR);
}
或者简单地将您的变量包装在strval()中,就像这样
oci_bind_by_name($stid, ":description_bv", strval($description));
oci_bind_by_name($stid, ":content_bv", strval($content));
虽然我强烈建议创建/使用一个可以为你处理所有变量绑定的自定义类,但是对你的变量使用strval()应该消除所有用于绑定的无效变量&#34;传递整数,双精度或其他格式时出错。