Как загрузить файлы с использованием PHP - ODBC в Oracle? - PullRequest
0 голосов
/ 10 октября 2018

Я делал это, я знаю, что соединение работает, и я проверю это в другом проекте.но теперь мне нужно манипулировать данными блобов в oraclo с помощью php с использованием ODBC, но я не знаю, как это сделать.

Я получаю сообщение об ошибке от Oracle: [Oracle] [ODBC] [Ora] ORA-00972: идентификатор слишком длинный ...

Код: PHP-соединение odbc с оракулом

Table in DB
CREATE TABLE ARCHIVOS
(
  ID       NUMBER,
  ARCHIVO  BLOB,
  NOMBRE   VARCHAR2(150 BYTE),
  TIPO     VARCHAR2(150 BYTE)
);

Код: PHP-соединение odbc с оракулом

<code>
<?php 
if(filter_input(INPUT_POST, 'btnGuardar')){
  $id=  filter_input(INPUT_POST, 'id');


  $archivo_nombre=$_FILES['archivo']['name'];
  $archivo_tipo = $_FILES['archivo']['type'];  
  $archivo_temp = $_FILES['archivo']['tmp_name']; 
  $archivo_string=  file_get_contents($archivo_temp);

  $user = "user ";
  $password = "password";
  $driver = "Oracle in OraClient11g_home1";
  $odbc_string = "DSN=INVENTARIOREPORTS;DRIVER= 
  {".$driver."};SERVER=127.0.0.1;DATABASE=DB;";

  $conn = odbc_connect($odbc_string,$user,$password);

  $sql = " INSERT INTO ARCHIVOS (ID, ARCHIVO, NOMBRE, TIPO) VALUES 
  (".$id.",".$archivo_string.",'".$archivo_nombre."','".$archivo_tipo."') ";

  $res = odbc_exec($conn,$sql);

  if ($res) {
    echo 'correcto';
  }else{
    echo 'Error al guardar';
  }

  odbc_close($conn);

  $res = null;
}
?>

<!--FORMULARIO-->
<!DOCTYPE html>
<html>
 <head>
   <meta charset="UTF-8">
   <title></title>
  </head>
 <body>
   <form method="post" action="" enctype="multipart/form-data">
     id <input type="number" name="id" /><br/>
     <input type="file" name="archivo" /><br/><br/>
     <input type="submit" name="btnGuardar" value="Guardar" />
   </form>
 </body>
</html>

</code>

Я также хотел бы получить доступ к этим файлам, не могли бы вы мне помочь? введите описание изображения здесь

1 Ответ

0 голосов
/ 11 октября 2018

Если вы напечатаете $sql, вы увидите, что у вас есть 3 строковых значения, но вы цитируете только 2 из них.

Правильный способ избежать глупых опечаток, подобных этой, и внедрение SQL-кода также заключается в использовании подготовленных операторов:

$sql = 'INSERT INTO ARCHIVOS (ID, ARCHIVO, NOMBRE, TIPO)
    VALUES(?, ?, ?, ?)';
$stmt = odbc_prepare($conn, $sql);
$success = odbc_execute($stmt, [$id, $archivo_string, $archivo_nombre, $archivo_tipo]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...