Как обновить изображение BLOB в базе данных Oracle с помощью php? - PullRequest
0 голосов
/ 14 января 2019

Я хочу обновить изображение (блоб) в моей базе данных, используя PHP. Я смог вставить его успешно, но не смог его обновить. Я получаю сообщение об ошибке «Указан неверный локатор больших объектов» .

Это запрос вставки:

$ myblobid = 157;

  // Insert the BLOB from PHP's tempory upload area

  $lob = oci_new_descriptor($db, OCI_D_LOB);
  $stmt = oci_parse($db, 'INSERT INTO JOB_SEEKER (SEEK_ID, SEEK_PICTURE) '
         .'VALUES(:MYBLOBID, EMPTY_BLOB()) RETURNING SEEK_PICTURE INTO :BLOBDATA');
  oci_bind_by_name($stmt, ':MYBLOBID', $myblobid);
  oci_bind_by_name($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
  oci_execute($stmt, OCI_DEFAULT);

  // The function $lob->savefile(...) reads from the uploaded file.
  // If the data was already in a PHP variable $myv, the
  // $lob->save($myv) function could be used instead.
  if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
    oci_commit($db);
  }
  else {
    echo "Couldn't upload Blob\n";
  }
  $lob->free();
  oci_free_statement($stmt);

Я пытался обновить запрос:

 $myblobid = 157;
      // Update 
      $lob = oci_new_descriptor($db, OCI_D_LOB);
      $stmt = oci_parse($db, 'UPDATE JOB_SEEKER SET SEEK_PICTURE = :BLOBDATA WHERE SEEK_ID = :MYBLOBID ');
      oci_bind_by_name($stmt, ':MYBLOBID', $myblobid);
      oci_bind_by_name($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
      oci_execute($stmt, OCI_DEFAULT);

      // The function $lob->savefile(...) reads from the uploaded file.
      // If the data was already in a PHP variable $myv, the
      // $lob->save($myv) function could be used instead.
      if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
        oci_commit($db);
      }
      else {
        echo "Couldn't upload Blob\n";
      }
      $lob->free();
      oci_free_statement($stmt);

1 Ответ

0 голосов
/ 14 января 2019

Это решило мою проблему:

 $lob = oci_new_descriptor($db, OCI_D_LOB);
   $myblobid = 157;
  $stmt = oci_parse($db, "UPDATE JOB_SEEKER SET SEEK_PICTURE = EMPTY_BLOB() WHERE SEEK_ID = '$myblobid' RETURNING SEEK_PICTURE INTO :BLOBDATA");

  oci_bind_by_name($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
  oci_execute($stmt, OCI_DEFAULT);

  // The function $lob->savefile(...) reads from the uploaded file.
  // If the data was already in a PHP variable $myv, the
  // $lob->save($myv) function could be used instead.
  if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
    oci_commit($db);
  }
  else {
    echo "Couldn't upload Blob\n";
  }
  $lob->free();
  oci_free_statement($stmt);
...