sql >> Database teknologi >  >> RDS >> Oracle

PDO_OCI - ind i et klodsfelt

Jeg har fundet en løsning her:

https://bugs.php.net/bug.php?id=57095

[2009-08-11 11:27 UTC] lehresman hos gmail dot skrev:

En kollega fandt løsningen. Når du har at gøre med CLOB'er i Oracle, der bruger PDO, skal du ikke behandle det som en LOB. Du skal binde den som en PDO::PARAM_STR og give den længden af ​​strengen (den 4. parameter er nøglen, ellers mislykkes den med en fejlmeddelelse om LONG type).

Her er et eksempel på, hvordan man med succes indsætter i en CLOB i Oracle:

<?php

/*
CREATE TABLE clob_test (my_clob CLOB)
*/

$big_string = "";
for ($i=0; $i < 10000; $i++)
    $big_string .= rand(100000,999999)."\n";

try {
    $pdo = new PDO("oci:dbname=TESTDB", "TESTUSER", "TESTPW");
    $stmt = $pdo->prepare("INSERT INTO healthbit.clob_test (my_clob) VALUES (:cl)");
    $stmt->bindParam(":cl", $big_string, PDO::PARAM_STR, strlen($big_string));
    $pdo->beginTransaction();
    if (!$stmt->execute()) {
        echo "ERROR: ".print_r($stmt->errorInfo())."\n";
        $pdo->rollBack();
        exit;
    }
    $pdo->commit();

    $stmt = $pdo->prepare("SELECT my_clob FROM healthbit.clob_test");
    $stmt->execute();
    $row = $stmt->fetch();
    $str = "";
    while ($tmp = fread($row[0],1024))
        $str .= $tmp;
    echo strlen($str); // prints 70000
} catch (Exception $e) {
    echo "ERROR: ";
    echo $e->getMessage();
    $pdo->rollBack();
}

Fungerer helt fint for mig...




  1. Optimering af databasehastighed:få tabeller med mange rækker, eller mange tabeller med få rækker?

  2. Humaniseret eller naturlig nummersortering af blandede ord-og-tal-strenge

  3. Hvordan kan jeg tælle og gruppere kolonner separat med MySQL?

  4. MySQL trigger efter indsættelse og efter opdatering