Идентификатор слишком длинный при вставке BLOB-объекта - PullRequest
0 голосов
/ 22 марта 2012

У меня есть база данных Oracle, к которой я подключаюсь с помощью PHP OCI8.Один из моих методов берет закодированное изображение Base64 и декодирует его и пытается вставить изображение как BLOB-объект.Oracle выдает идентификатор исключения слишком длинный.

$query = "
    insert into field_call_photos (photo_datetime, field_call_visit_pk, photo, field_call_photo_type_pk)
    values (to_date('$visitDT  $visitDTHrs $visitDTMins $visitDTAmpm','mm/dd/yyyy hh:mi am'),
        '$newFcvPK', utl_encode.base64_decode(utl_raw.cast_to_raw($fileBlob)),'$fileTypePK')";

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Ваш код, кажется, вставляет содержимое файла в запрос SQL без кавычек, что, вероятно, заставляет Oracle думать, что это идентификатор.

Я бы использовал OCI BLOB-функций вместо.Примерно так:

$stmt = oci_parse($database, "INSERT INTO (a,b,c, photo) VALUES('aval','bval','cval', EMPTY_BLOB()) RETURNING photo INTO :photo");
$newlob = oci_new_descriptor($database, OCI_D_LOB);
oci_bind_by_name($stmt, ":photo", $newlob, -1, OCI_B_BLOB);
oci_execute($stmt,OCI_DEFAULT);
$newlob->save(base64_decode($fileBlob));
oci_commit($stmt);
// cleanup
$newlob->free();
oci_free_statement($stmt);

Я упускаю проверку ошибок для простоты, вам нужно проверить, вернули ли анализ и выполнение правильные вещи, и использовать oci_error , чтобы увидеть, что пошло не так.

0 голосов
/ 28 марта 2017

Используя соединение Codeigniter, исправьте oci_commit, где должен быть идентификатор соединения.

$db = $this->load->database('oracle', true);
$stmt = oci_parse($db->conn_id, "INSERT INTO LOTUS.PROCESO_ARCHIVO (ARCHIVO) VALUES(EMPTY_BLOB()) RETURNING archivo INTO :archivo");
$newlob = oci_new_descriptor($db->conn_id, OCI_D_LOB);
oci_bind_by_name($stmt, ":archivo", $newlob, -1, OCI_B_BLOB);
oci_execute($stmt,OCI_DEFAULT);        
$newlob->save(file_get_contents($file_path));
oci_commit($db->conn_id);
$newlob->free();
oci_free_statement($stmt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...