sql >> データベース >  >> RDS >> Oracle

PDO_OCI-CLOBフィールドに

    私はここで解決策を見つけました:

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

    [2009-08-11 11:27 UTC] gmail dot comwroteのlehresman:

    同僚が解決策を発見しました。 OracleでPDOを使用してCLOBを処理する場合は、それをLOBとして扱わないでください。これをPDO::PARAM_STRとしてバインドし、文字列の長さを指定する必要があります(4番目のパラメーターがキーであり、それ以外の場合はLONG​​型に関するエラーメッセージで失敗します)。

    OracleのCLOBに正常に挿入する方法の例を次に示します。

    <?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();
    }
    

    私にとっては完全にうまく機能します...




    1. Oracle SQL照合

    2. テーブルの変更:「Nullを許可」属性をnull以外からnullを許可に変更する方法

    3. OracleSQLDeveloperでの新しいデータベースと新しい接続の作成

    4. sqliteから検索されたデータを返します