PHP错误oci_bind_by_name():用于绑定的无效变量

时间:2017-02-02 14:35:53

标签: php rss

我有一个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);

1 个答案:

答案 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;传递整数,双精度或其他格式时出错。