вставить json объект в oracle db столбец таблицы BLOB - PullRequest
0 голосов
/ 01 марта 2020

Ниже вывешено в консоли разработчика как POST: 404 . Я предполагаю, что мой php не правильно. Что я здесь не так делаю?

На этой стороне JS я делаю:

    ........
    user = JSON.stringify(user); // updated Data, want to push to db table blob column
    pushData ();

    function pushData (){
        const ajax = $.ajax({
            method: 'POST',
            url: `./Settings.php`,
            data: {obj_json: JSON.stringify(user) },
            dataType: "json",
            success: function(result) {
                //Write your code here
                console.log("data posted?");
            }
          });
        }
  .....

/ Настройки. php ( Используемый класс имеет действительное соединение с БД, мой obj_json - это столбец, в таблице которого установлено значение blob). Я не совсем уверен, что делать с $obj

class Settingz extends \myApp\Data
{

    public function insertBlob($obj, $last_update) {
        $obj = $_POST['obj_json'];

        $sql = "INSERT INTO MY_TABLE(last_update,obj_json) VALUES(:last_update,:obj_json)";
        $stmt = $this->pdo->prepare($sql);

        $stmt->bindParam(':last_update', $last_update);
        $stmt->bindParam(':obj_json', $blob, PDO::PARAM_LOB);

        return $stmt->execute();
    }
  }

1 Ответ

1 голос
/ 02 марта 2020

С OCI8 вы можете использовать временный большой объект (см. Стр. 235 Подземный PHP и Oracle Ручной ), но с PDO_OCI используйте предложение RETURNING, например:

<?php


try {
    $db = new PDO('oci:dbname=localhost/orclpdb1', 'cj', 'welcome');
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    exit;
}

$stmt = $db->prepare("drop table cjblob");
$stmt->execute();

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $db->prepare("create table cjblob (id number, data blob)");
$stmt->execute();

function do_insert($db, $id, $data)
{
    $stmt = $db->prepare("insert into cjblob (id, data) values (:id, empty_blob()) returning data into :blob");
    $stmt->bindParam(':id', $id);
    $stmt->bindParam(':blob', $blob, PDO::PARAM_LOB);
    $blob = null;
    $db->beginTransaction();
    $stmt->execute();

//  var_dump($blob);  // $blob becomes a stream

    fwrite($blob, $data);
    fclose($blob);
    $db->commit();
}

do_insert($db, 1, str_pad("Z",  40000, "Z"));

// Fetch it back
$stmt = $db->prepare('select data from cjblob where id = ?');
$id = 1;
$stmt->execute(array($id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($row);
var_dump(stream_get_contents($row['DATA']));

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...