BLOB

황인환·2024년 8월 4일

BLOB 목적

큰 크기의 이진데이터를 저장하기 위해 사용

BLOB 특징

대용량 데이터 저장
이진데이터사용
대부분의 데이터베이스 지원

BLOB 유형

TINYBLOB : 작은 크기의 BLOB
BLOB: 보통 크기의 BLOB
MEDIUMBLOB: 보통 보다 큰 크기의 BLOB
LONGBLOB: 가장 큰 크기의 BLOB

DB 컬럼 생성때 사용

BLOB사용법

  • 일반 sql문과 사용법 같음

  • 대신 경로를 업로드할때 사용하는 move_uploaded_file대신 file_get_contents사용

    move_uploaded_filefile_get_contents
    클라이언트(사용자의 웹 브라우저)로부터 업로드된 파일을 서버의 지정된 디렉토리로 이동시키는 것PHP에서 파일의 내용을 읽어오는 함수. 주로 파일을 읽어서 그 내용을 문자열로 반환할 때 사용

ex)

데이터저장

경로 업로드

$tmpfile=$_FILES['b_file']['tmp_name'];
$name=$_FILES['b_file']['name'];
$folder="upload/".$name;
move_uploaded_file($tmpfile,$folder);
$sql_insert="INSERT INTO board (title, content, date, author, pwd, file) VALUES('$title', '$content', '$date', '$author', '$password', '$name')";

BLOB로 데이터베이스에 저장

$filecontent=file_get_contents($_FILES['bfile']['tmp_name']);
$filename=$_FILES['bfile']['name'];
$sql="INSERT INTO uploadt (title,content,filename,filecontent) VALUES('$title','$content','$filename','$filecontent')";
$result=mysqli_query($conn,$sql);

객체지향형

$filecontent=file_get_contents($_FILES['bfile']['tmp_name']);
$filename=$_FILES['bfile']['name'];

$conn=mysqli_connect('','','','sqli');

$stmt = $conn->prepare("INSERT INTO uploadt (title, content, filename, filecontent) VALUES (?, ?, ?, ?)");
$n=NULL;
$stmt->bind_param('sssb',$title,$content,$filename,$n);
$stmt->send_long_data(3,$filecontent);

if($stmt->execute()){ ?>
    <a href="./index.php">go</a>
<?php }else{
    echo "fail". $stmt->error;
}
?>

데이터 다운로드

경로저장

<a href="upload/DB에저장된 이미지 이름 ex)<?=$row['file']?" class="download-link" download>

BLOB

클라이언트측

<a href="download.php?good=이미지불러올번호">

download.php

<?php
$i=$_GET['good'];
$conn=mysqli_connect('localhost','root','123456789a','sqli');
$sql="SELECT * FROM uploadt WHERE idx =$i";
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_assoc($result);
if($row){
    $filename=$row['filename'];
    $filecontent=$row['filecontent'];
    header("Content-Type: image/png");
    header("Content-Disposition: attachment; filename=\"$filename\"");
    echo $filecontent;
    echo "<script>history.back(1);</script>";
}
?>

0개의 댓글