dongqianzhan8325 2018-10-10 19:52
浏览 58
已采纳

如何使用PHP上传文件 - Oracle中的ODBC?

I've been doing this, I know the connection works, and I'll test it in another project. but now I need to manipulate blob data in oraclo with php using ODBC, but I do not know how to do it.

I'm getting the error from oracle: [Oracle][ODBC][Ora]ORA-00972: identifier is too long...

The code: PHP connection odbc with oracle

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

The code: PHP connection odbc with oracle

<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>

I would also like to be able to access these files, can you help me please?enter image description here

  • 写回答

1条回答 默认 最新

  • dtoaillwk759656786 2018-10-11 14:19
    关注

    If you print $sql you'll see you have 3 string values but you only quote 2 of them.

    The proper way to avoid silly typos like this and SQL injection too is to use prepared statements:

    $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]);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?