2017-02-20 53 views
1

哎,所以我有一个数据库,我的PHP文件是否正确连接到它:从PHP数据库获取Blob和使用它的HTML标签

<?php 
$con=new mysqli ("localhost","root","","chroniclemark"); 

...

而且我有一个查询获取图像:

$sqlget = "SELECT imagem FROM galeria where idg = 1"; 
$sqldata = mysqli_query($con,$sqlget) or die ('error getting database'); 

while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)){ 
    $lol = '<img src="data:image/jpeg;base64,'.base64_encode($row['imagem']).'"/>'; 

} 
?> 

这就是我的php语句。如果我,图像出现。 现在我需要把它放在html img标签中。 而这是行不通的:

<img src='image.php?<?php $row['imagem']?>' /> 

我试过其他的东西,没有什么作品。 顺便说一句,img标签和PHP语句是在同一文件中,就像这样:

</head> 
<body> 

<?php 
    $con=new mysqli ("localhost","root","","chroniclemark"); 
    if($con->connect_error) 
    { 
     echo $con->connect_errno; 
     die("Database Connection Failed"); 
    } 

    $sqlget = "SELECT imagem FROM galeria where idg = 1"; 
    $sqldata = mysqli_query($con,$sqlget) or die ('error getting database'); 

    while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)){ 
     $lol = '<img src="data:image/jpeg;base64,'.base64_encode($row['imagem']).'"/>'; 

    } 
    ?> 

    <img src='image.php?<?php $row['imagem']?>' /> 

          ... 

对不起,我的英文不好,如果你能帮助,请做。我会很高兴。

+0

echo'';在<?php事物内部工作并使图像显示。但是我需要在<?php –

+0

之外使用标记。您需要将'$ lol'变量回显给浏览器。你的例子不显示。 –

+0

''/>'是否打算在相同的文件或其他文件中使用? –

回答

1

由于查询仅返回一行,这简化你需要做什么。

<?php 
    $con=new mysqli ("localhost","root","","chroniclemark"); 
    if($con->connect_error) 
    { 
     echo $con->connect_errno; 
     die("Database Connection Failed"); 
    } 

    $sqlget = "SELECT imagem FROM galeria where idg = 1"; 
    $sqldata = mysqli_query($con,$sqlget) or die ('error getting database'); 

    $row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC); 
    $lol = base64_encode($row['imagem']); 


?> 

在你的问题你要么忘记做编码或不知道它是必需的:主要是因为你没有在结果集中需要循环,你可以摆脱while循环。现在,因为编码的照顾,可以输出在你的标记图像:

<img src="data:image/jpeg;base64, <?php echo $lol; ?>" /> 

如果你有一个以上的行吗?你会把图像数组,然后后来正确打电话给他们:

<?php 
    $con=new mysqli ("localhost","root","","chroniclemark"); 
    if($con->connect_error) 
    { 
     echo $con->connect_errno; 
     die("Database Connection Failed"); 
    } 

    $sqlget = "SELECT imagem FROM galeria where idg = 1"; 
    $sqldata = mysqli_query($con,$sqlget) or die ('error getting database'); 

    while ($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)) { 
     $lol[] = base64_encode($row['imagem']); 
    } 

?> 

然后是这样的:

<img src="data:image/jpeg;base64, <?php echo $lol[1]; ?>" /> 

这会在阵列中输出的第二图像。由于所有数组都以0开头,因此您只需计数或循环或输出完整图像阵列所需的任何数据即可。

+0

没有循环,它绝对更好更简单,但我得到的是同样的结果。感觉就像我缺少一些简单的东西。 –

+0

您是否检查过服务器的错误日志? –

+0

@MarkCoelho我对图像标签 –

0

您需要使用正确的base64前缀设置图片标记的src,就像您在while循环中所做的一样。

这应该工作,但它没有进行测试:

</head> 
<body> 

<?php 
    $con=new mysqli ("localhost","root","","chroniclemark"); 
    if($con->connect_error) 
    { 
     echo $con->connect_errno; 
     die("Database Connection Failed"); 
    } 

    $sqlget = "SELECT imagem FROM galeria where idg = 1"; 
    $sqldata = mysqli_query($con,$sqlget) or die ('error getting database'); 

    while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC)){ 
     $lol = $row['imagem']; 

    } 
    ?> 

    <img src="data:image/jpeg;base64,<?php base64_encode($lol) ?>"/> 
+0

这里唯一的问题是你每次循环都会覆盖'$ lol',只会得到最后一张图片。如果只有一行,这不应该引起问题,但也不需要循环。 –

+0

啊,我明白你的意思,但我还没有工作。 –