使用PHP Oci8在单个insert语句中的clob列和varchar列中插入数据

时间:2015-07-26 09:51:05

标签: php oracle oci8

我想在oracle中的单个insert语句中插入clob和varchar2列中的数据。

$conn=oci_connect();

    if (!$conn)
    {
            $e = oci_error();   // For oci_connect errors pass no handle

            echo "if not connection<br>";

            echo htmlentities($e['message']);
    }
    else
    {
    //Where email and type column has varchar2 datatype and elements column has CLOB datatype
            $isql="INSERT INTO TEST_DEV
            VALUES(':email',':type',':elements')";

            $stmt = oci_parse($conn,$isql);

            oci_bind_by_name($stmt, ":email", 'test@test.com');
            oci_bind_by_name($stmt, ":type", 'test_records');
            oci_bind_by_name($stmt, ":elements", 'asdadasdsa|asdsa',-1,OCI_B_BLOB);

            $rc=oci_execute($stmt);

            if(!$rc)
            {
                $e=oci_error($stmt);
                var_dump($e);
            }

            oci_commit($conn);
        }

        oci_free_statement($stmt);
        oci_close($conn);

此代码提供错误。怎么解决?

谢谢,

费萨尔纳西尔

1 个答案:

答案 0 :(得分:0)

您需要删除SQL中占位符周围的撇号,否则您将按字面插入文本':email',而不是您尝试绑定的变量数据:

class bar
{
public:
  int h(int&& x, int&& y) { return x + y ; }
};

memberf_pointer<bar, int&&, int&&> mb = &bar::h;

$isql = 'INSERT INTO TEST_DEV VALUES(:email, :type, :elements)'; 不接受字符串文字作为值,因为它通过引用绑定。将值分配给变量并使用函数调用中的值:

oci_bind_by_name()

由于您只插入字符数据(毕竟它是CLOB),因此您不需要对绑定执行任何不同的操作。 $email = 'test@test.com'; oci_bind_by_name($stmt, ':email', $email); 默认为oci_bind_by_name(),因此只需绑定其他变量:

SQLT_CHR

有关进一步参考(包括使用LOB的多个示例),请阅读“Oracle + PHP Cookbook”中的Working with LOBs in Oracle and PHP