【问题标题】:How to reference an Imagick object in a PHP UPDATE query?如何在 PHP UPDATE 查询中引用 Imagick 对象?
【发布时间】:2011-11-04 20:43:48
【问题描述】:

这个查询有什么问题?

我正在尝试将 ImageMagick 对象写回数据库(PostgreSQL bytea 字段)。 这是 PHP 代码 - 使用 Imagick 函数。

$query = "UPDATE table SET destcol = ".$im." WHERE key = " .$args[0];

【问题讨论】:

  • 您是否遇到了特定错误?

标签: php postgresql imagemagick imagick


【解决方案1】:

如果 $im 来自于做

$im = new Imagick();

您的查询将失败。您不能将 PHP 对象插入到这样的数据库中。在最低限度,你必须做类似的事情

$im = new Imagick();
$serialized = serialize($im);
$safe_serialized = mysql_real_escape_string($serialized);

$sql = "INSERT ... destcol='$safe_serialized' ...";

还请注意,这很可能会失败 - 如果对象在内部保存打开的文件,那么一旦将对象从数据库中拉出并取消序列化(),这些文件句柄几乎肯定会无效。

为什么需要以这种方式保存一个 imagick 对象?首先实例化它的成本并不高。

【讨论】:

  • 感谢您的回复。是的,它 来自 Imagick - 你正在帮助我更接近解决方案。我正在研究 PG col,所以我使用的是 pg_unescape_bytea 版本。从那里,我正在使用这样的未转义字符串: $im->readimageblob($imagestring);当然,仍然不知道我在实际操作图形方面取得了什么成功,因为无法成功将其写回数据!
  • 但是为什么将IM对象存储在数据库中呢?有一种情况可以在数据库中存储一个实际的图像文件,但是一个 PHP 对象来操作该图像?为什么...?
  • “为什么”比实际更具有哲学意义 - 目前,我们想看看什么是可能的。我一直在尝试在字符串上使用各种 serialize / pg_escape 函数,但不能将它返回到任何可用的形式 - 甚至不能返回任何合理的长度!有什么想法吗?
【解决方案2】:

我猜你正在更新字符串列而不引用它们。;

$query = "UPDATE table SET destcol = '".$im."' WHERE key = '" .$args[0]. "'";

【讨论】:

  • 这很有帮助,谢谢。我现在至少能够将一些东西写回数据!但是,即使尝试将同一列写回 diff 列,我似乎也无法重现相同的内容。哎呀!需要帮助!
猜你喜欢
  • 2013-06-12
  • 2012-03-26
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2011-05-19
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多