2017-02-20 46 views
1

Эй поэтому у меня есть база данных, и мой PHP документ правильно подключен к нему:Получение Blob из базы данных с PHP и использовать его на 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. Если I echo $lol;, изображение появится. Теперь мне нужно поместить это в тег 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 ''; Работает внутри объекта вне

+0

. Вам нужно отобразить в браузере переменную $ lol. Ваш пример не показывает это. –

+0

' '/>' предназначен для использования в том же файле или другом файле? –

ответ

1

Поскольку запрос возвращает только одну строку, это упрощает то, что вам нужно сделать. В первую очередь вы можете избавиться от петли while, как вам не нужно перебрать результирующий набор:

<?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']); 


?> 

В своем вопросе вы либо забыли сделать кодировку, или не знаете, что это необходимо. Теперь, поскольку кодирование позаботятся, вы можете выводить изображение в разметке:

<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

Вам необходимо установить src тега изображения с правильным префиксом base64, как и в цикле 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

А, я понимаю, что вы имеете в виду, но я пока не работаю. –