oracle — вставляет данные в столбец clob и столбец varchar в одном операторе вставки с использованием PHP Oci8

Я хочу вставить данные в столбец clob и varchar2 в одном операторе вставки в Oracle.

$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", '[email protected]');
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

Решение

Вам нужно удалить апострофы вокруг заполнителей в вашем SQL, иначе вы вставите текст «: email» буквально, а не переменные данные, которые вы пытаетесь связать:

$isql = 'INSERT INTO TEST_DEV VALUES(:email, :type, :elements)';

oci_bind_by_name() не принимает строковые литералы в качестве значений, так как связывается по ссылке. Присвойте свои значения переменным и используйте их в вызове функции:

$email = '[email protected]';
oci_bind_by_name($stmt, ':email', $email);

Поскольку вы вставляете только символьные данные (в конце концов, это CLOB), вам не нужно делать что-то другое с вашей привязкой. oci_bind_by_name() по умолчанию SQLT_CHR так что просто свяжите как другие переменные:

$elements = 'asdadasdsa|asdsa';
oci_bind_by_name($stmt, ':elements', $elements);

Для дальнейшего ознакомления (включая несколько примеров работы с LOB) прочитайте Работа с большими объектами в Oracle и PHP в «Oracle + PHP Cookbook».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]