通过 Fat Free Framework SQL 数据映射器检索 BYTEA
BYTEA retrieval via Fat Free Framework SQL data mapper
我正在尝试使用 Fat Free Framework 中的 \DB\SQL\Mapper
从 PostgreSQL 数据库中检索存储的二进制数据 (bytea
)。
但是由于某种原因,除了 "Resource ID" 字符串,我似乎什么也得不到。例如。
// Establish database communication
$this->db = new \DB\SQL(
$f3->get("database.type") .
":host=" . $f3->get("database.host") .
";port=" . $f3->get("database.port") .
";dbname=" . $f3->get("database.name"),
$f3->get("database.user"),
$f3->get("database.password"),
array(
\PDO::ATTR_PERSISTENT => TRUE,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
)
);
// Firmware Object-Relational-Mapper
$this->firmware = new \DB\SQL\Mapper(
$this->db,
"firmware"
);
// Selection parameters
$this->select = array(
"id=:id",
":id" => array(
$f3->get("PARAMS.id"),
\PDO::PARAM_INT
)
);
// Map to record
$this->firmware->load($this->select);
// Error: expects parameter 1 to be resource, string given
// $this->firmware->binary is "Resource id #23"
fpassthru($this->firmware->binary);
但是,如果我针对 \DB\SQL
PDO class 执行准备好的语句,我可以毫无问题地检索二进制数据。即
$record = $this->db->exec(
'SELECT "binary" FROM "firmware" WHERE id=?',
$f3->get("PARAMS.id")
);
fpassthru($record[0]['binary']); //spits out the binary data
所以我的问题是;有没有一种方法可以从 table 中检索二进制数据,同时仍在 Fat Free 中使用 ORM?
我认为这是因为应用了类型转换 here。
ORM 可能无法在 PostgreSQL 中为您的二进制字段找到正确的 pdo 类型。
你可以尝试这样覆盖它:
$this->firmware = new \DB\SQL\Mapper(
$this->db,
"firmware"
);
$schema = $this->firmware->schema();
$schema['binary']['pdo_type'] = \PDO::PARAM_LOB;
$this->firmware->schema($schema);
可能您还需要调整 db->value method 并添加默认情况下 returns 进入的内容,因此值会通过 return $val
.
我正在尝试使用 Fat Free Framework 中的 \DB\SQL\Mapper
从 PostgreSQL 数据库中检索存储的二进制数据 (bytea
)。
但是由于某种原因,除了 "Resource ID" 字符串,我似乎什么也得不到。例如。
// Establish database communication
$this->db = new \DB\SQL(
$f3->get("database.type") .
":host=" . $f3->get("database.host") .
";port=" . $f3->get("database.port") .
";dbname=" . $f3->get("database.name"),
$f3->get("database.user"),
$f3->get("database.password"),
array(
\PDO::ATTR_PERSISTENT => TRUE,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
)
);
// Firmware Object-Relational-Mapper
$this->firmware = new \DB\SQL\Mapper(
$this->db,
"firmware"
);
// Selection parameters
$this->select = array(
"id=:id",
":id" => array(
$f3->get("PARAMS.id"),
\PDO::PARAM_INT
)
);
// Map to record
$this->firmware->load($this->select);
// Error: expects parameter 1 to be resource, string given
// $this->firmware->binary is "Resource id #23"
fpassthru($this->firmware->binary);
但是,如果我针对 \DB\SQL
PDO class 执行准备好的语句,我可以毫无问题地检索二进制数据。即
$record = $this->db->exec(
'SELECT "binary" FROM "firmware" WHERE id=?',
$f3->get("PARAMS.id")
);
fpassthru($record[0]['binary']); //spits out the binary data
所以我的问题是;有没有一种方法可以从 table 中检索二进制数据,同时仍在 Fat Free 中使用 ORM?
我认为这是因为应用了类型转换 here。 ORM 可能无法在 PostgreSQL 中为您的二进制字段找到正确的 pdo 类型。
你可以尝试这样覆盖它:
$this->firmware = new \DB\SQL\Mapper(
$this->db,
"firmware"
);
$schema = $this->firmware->schema();
$schema['binary']['pdo_type'] = \PDO::PARAM_LOB;
$this->firmware->schema($schema);
可能您还需要调整 db->value method 并添加默认情况下 returns 进入的内容,因此值会通过 return $val
.