我在网上搜索了关于在clob字段上执行sql更新的示例;我相信我使用的例子是最简单的一个应该有用的例子,但到目前为止还没有用。我试图将base64编码的图像插入到oracle中的clob字段中。下面是函数和clob条目数组。我检查了表格并确认clob字段没有更新。
// update row with new clob values
private function clobUpdate($clobArray){
try {
foreach ($clobArray as $item) {
$query = "UPDATE ". static::$table ." SET ". $item["clobField"] ." = EMPTY_BLOB() WHERE ID = :ID RETURNING ". $item["clobField"] . " INTO :blob";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $item["id"]);
$stmt->bindParam(':blob', $item["clobValue"], PDO::PARAM_LOB);
$blob = NULL;
$this->db->beginTransaction();
$stmt->execute();
$this->db->commit();
print_r($blob);
die();
}
} catch(Exception $e){
throw new Exception($e);
}
}
Array
(
[0] => Array
(
[clobField] => 0
[clobValue] => data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAM1BMVEWxvsa7xs7CzNPM1drT2t/a4OTd4+fn6+7g5enW3eLFz9W/ydC0wcnP1924xMvJ0tjk6OzcN6J1AAAED0lEQVR4AezBgQAAAACAoP2pF6kCAAAAAAAAAAC4vbvLgV3FgQBcCYHiLzT7X+28XWkermbOSeLYMd8OqAA2Ust9u20PR0z8R44l1AYX+n5G/ot01oFPG7/I/yGd23dXn/h/yZ/MoBX+gVTxLTXzD+XQ8Rl75l+YAd+wRf6lvMO+fvKCMmDclnjJ3GHaj5cdMOzgDVKHUT3xFnOzu37PCfREek6gJ9JzAj2RrhNIvNkc9uufo2r44wMKzNj4iB+M6JnP2GDDyYckmND4mAALMp8zoF/ggyLU65NPar43ABmdbwCy+d4AZHS9AfR3Q5WPO6BZ4uNmh16DAqrZZ7CDZ3GihO77BJC7/hrgtQ4cFJH1XwFeLwEKadCpUUjQ3wX4vAVPCknQKVIKdJqUskGjTjG7/iLgsQxUijmhUaCY6LsKksl5FSRXABpR0OY9gAZ9uvcAGgWFFYA6K4BAQcV7AHEFoM4KoFBQdv4UIFcAaqwAVgArgBXACmAFsAJokaJigyqB4oLz9atKoPEVDVpkviJDicqXVOhQ+JICFTpf06HBztfsmmqg30pYSN+XQORr4gpgBbACWJfgKoOrEVqt8HoMrefwuyZfMaFF4CuC/rkRbgYJFAVXoL9rsEKPzhd0KHJQ3AFNBsUNqHJS2GlrjK6DEatjUtAcUGckikkDGoVMETlAq01/A2S/J57Q7Od9mtxwfgIkRgl1+D4DBbp1v5PUZOpAhnY7HxWgXvb0CBa/Bg84Hy7e4Hu8fAR8b4EGE4LPDSCwBRqMqAIlwOGTaA6Y0cSbQAdzxRIs6Zl322BKEzgArpqBCHOiwK9B/LRDDQZtk3epMKm6aAEFEjhgVtW/fv0JlA7XCRwwrjpfP3BqfgHo74kbzDu9BxB5RfUeQFgBmDe9B0DnAXReUmBd4yXReRtAwrrMa3bYVknXZ6BnXtVgWeFlucOugzdI3ef67SfQC2+SBgxqmbeZO6zpJ29VOkypkzebFXa0xAfkBhtaFBgmrFeNfFCsUK3XzIfl2qHVOCcFzHNAoz1STNyhzAiZonIY0GMvfEHZnX58XdtgL3xV2Z1+fA3bYC9Uouy+Pr6CbdAK1SkNQvovU6X863jeOCbVmscQ3vvOTkJNNCBVPKNmGpGrs+ULRFAzjcnVyfIFImiJRqWG60ahYWXgot+kafOHK0akeXHo//xKN0E/+BGlax+RqXEE5zb5IXOTXb/9BLZJek5gTComMIIk8YOS2PADrYLiUfG6BtIf/KjD+QYgh8UbQP5PCSY/awpMRdVtt34FCoxl7vy07vsEkLv8CbDWCmR+Wpbvgoz1QpUfV+VHQdpqBiM/Lpq+AwVuQX6efB9oqhds/Ly2AlgBrAD+3XB+Ca4yiMSPS/hv/wEp/tUncVv5oQAAAABJRU5ErkJggg==
[id] => 25
)
)
*****更新
Per Fred的错误处理链接和this 2007补丁我现在能够更新我的clob。更新后的功能:
// update row with new clob values
private function clobUpdate($clobArray){
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
foreach ($clobArray as $item) {
$query = "UPDATE ". static::$table ." SET ". $item["clobField"] ." = :CLOB WHERE ID = :ID";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':ID', $item["id"]);
$stmt->bindParam(':CLOB', $item["clobValue"], PDO::PARAM_STR, strlen($item["clobValue"]));
$blob = NULL;
$this->db->beginTransaction();
$stmt->execute();
$this->db->commit();
print_r($blob);
die();
}
} catch(PDOException $e){
echo "Exception ". $e->getMessage();
throw new Exception($e);
}
}
答案 0 :(得分:1)
NOTA:发布为社区维基,将问题标记为已解决。
您正在使用:ID
和:id
。这些都是区分大小写的。
WHERE ID = :ID
... bindParam(':id',
=> bindParam(':ID',
然而,从您找到的有关补丁的链接,似乎也有助于成功更新您的数据库。
根据你的评论:
“Per Fred的错误处理链接和this 2007 patch我现在能够更新我的clob。更新后的功能:”
// update row with new clob values
private function clobUpdate($clobArray){
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
foreach ($clobArray as $item) {
$query = "UPDATE ". static::$table ." SET ". $item["clobField"] ." = :CLOB WHERE ID = :ID";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':ID', $item["id"]);
$stmt->bindParam(':CLOB', $item["clobValue"], PDO::PARAM_STR, strlen($item["clobValue"]));
$blob = NULL;
$this->db->beginTransaction();
$stmt->execute();
$this->db->commit();
print_r($blob);
die();
}
} catch(PDOException $e){
echo "Exception ". $e->getMessage();
throw new Exception($e);
}
}