我想在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);
此代码提供错误。怎么解决?
谢谢,
费萨尔纳西尔答案 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。