使用php从MySQL数据库中检索图像

时间:2014-04-11 22:00:23

标签: php mysql blob

每个人都过得愉快。

我已经搜索了几个小时的共鸣,因为php的行为方式与我无法获得的查询...任何帮助将不胜感激。

我正在创建一个简单的应用程序,客户将在平板电脑上签名,并且需要将签名与其他订单详细信息一起存储在数据库中作为交付证明。

图像字段数据类型为BLOB。

虽然在数据库中存储图像并不是最好的方法,但它是需求的一部分,因此无法绕过它。签名正确存储在数据库中,使用MySQL工作台查看器检索实际显示Base64图像字符串的数据,并在复制并放置在<img>标记内时正确显示。

当我尝试查询数据库以检索图像时,我得到“警告:为foreach()提供的参数无效”,这意味着我在sql语句中有错误。当我在phpMyAdmin或MySQL Workbench中使用相同的查询时,我得到了结果。

我使用的查询如下:

$order_details_stmt =   $db->query("SELECT *
                                FROM dms_dl_delivery_details
                                WHERE `way_bill_number` = '$waybill_no'");



            foreach($order_details_stmt as $row3){

                        $signature      =   $row3['reciepient_signature'];
                        $invoice_book   =   $row3['reciept_book'];
                        $invoice_no     =   $row3['reciept_no'];
                        $recieved_by    =   $row3['recieved_by'];
            }

为了回应我使用<img src="<?php echo $signature; ?>">的签名,但我甚至没有到达那里。如果我var_dump($order_details_stmt);我得到布尔值假,但是,我从查询得到的所有其他变量都可以正常工作:$ invoice_book,$ invoice_no和$ recieved_by在输出页面中正确回显。

表create语句如下:

CREATE TABLE `dms_dl_delivery_details` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `way_bill_number` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `sender_customer_id` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
  `way_bill_date_time` datetime NOT NULL,
  `pick_up_address_id` varchar(13) COLLATE utf8_unicode_ci NOT NULL,
  `reciepient_signature` blob NOT NULL,
  `reciept_book` char(4) COLLATE utf8_unicode_ci NOT NULL,
  `reciept_no` char(4) COLLATE utf8_unicode_ci NOT NULL,
  `recieved_by` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `way_bill_number_UNIQUE` (`way_bill_number`)
  ) 
  ENGINE=InnoDB 
  DEFAULT CHARSET=utf8 
  COLLATE=utf8_unicode_ci;

我正在使用PHP 5.4.12和MySQL 5.6.12

对我在这里做错了什么的想法?

谢谢!

Error

2 个答案:

答案 0 :(得分:1)

它看起来应该是这样的

$result = $db->query("SELECT *
                      FROM dms_dl_delivery_details
                      WHERE `way_bill_number` = '$waybill_no'");

$order_details_stmt = $result->fetchAll();

答案 1 :(得分:0)

如果使用prepare-execute方法会发生什么......

$stm = $dbh->prepare($sql);
$stm->execute();
$result = $stm->fetchAll();

foreach (