Sql 更新 PDO 中的 clob 字段 (PHP) 不更新不抛出更新异常
Sql update for clob field in PDO (PHP) doesn't update nor throw update execption
我在网上搜索了有关对 clob 字段执行 sql 更新的示例;我相信我使用的示例是最简单的示例,但到目前为止 none 已经有效。我正在尝试将 base64 编码的图像插入到 oracle 的 clob 字段中。下面是函数和 clob 条目数组。我检查了 table 并确认 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
)
)
***** 更新
根据 Fred 的错误处理 link 和 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);
}
}
注意:作为社区 Wiki 发布以将问题标记为已解决。
您正在使用 :ID
和 :id
。区分大小写。
WHERE ID = :ID
... bindParam(':id',
=> bindParam(':ID',
- 使用 PDO 的错误处理http://php.net/manual/en/pdo.error-handling.php
然而,从 link 你发现的一个补丁,似乎也有助于成功更新你的数据库。
根据您的评论:
"Per Fred's error handling link and this 2007 patch I'm now able to update my clob. Updated function below:"
// 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);
}
}
我在网上搜索了有关对 clob 字段执行 sql 更新的示例;我相信我使用的示例是最简单的示例,但到目前为止 none 已经有效。我正在尝试将 base64 编码的图像插入到 oracle 的 clob 字段中。下面是函数和 clob 条目数组。我检查了 table 并确认 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
)
)
***** 更新
根据 Fred 的错误处理 link 和 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);
}
}
注意:作为社区 Wiki 发布以将问题标记为已解决。
您正在使用 :ID
和 :id
。区分大小写。
WHERE ID = :ID
... bindParam(':id',
=> bindParam(':ID',
- 使用 PDO 的错误处理http://php.net/manual/en/pdo.error-handling.php
然而,从 link 你发现的一个补丁,似乎也有助于成功更新你的数据库。
根据您的评论:
"Per Fred's error handling link and this 2007 patch I'm now able to update my clob. Updated function below:"
// 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);
}
}