PHP로 MySQL 데이터베이스에 Blob 삽입
PHPPHP로 MySQL 데이터베이스에 Blob 삽입
나는 데이터베이스에 이미지를 저장하려고하는데, 어떤 이유로 작동하지 않는 것 같습니다. 여기 내 테이블의 구조가 있습니다.
mysql> describe ImageStore;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| ImageId | int(11) | NO | PRI | NULL | |
| Image | longblob | NO | | NULL | |
+---------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
그리고 여기에 이미지를 삽입하는 쿼리 또는 최소한 그것이 필요한 것입니다.
//Store the binary image into the database
$tmp_img = $this->image['tmp_name'];
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
mysql_query($sql);
file_get_contents ($ tmp_image)의 값을 인쇄하면 화면에 많은 양의 데이터가 있습니다. 그러나이 값은 데이터베이스에 저장되지 않으며 내가 직면 한 문제입니다.
해결법
-
==============================
1.
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')";
이것은 $ sql이라는 이름의 PHP 문자열을 생성합니다. 아직 아무 쿼리도 실행하지 않으므로 잠시 MySQL을 잊어 버리십시오. 당신은 단지 끈을 만들고 있습니다.
PHP의 마법은 변수 이름 (예 : $ this-> image_id)을 큰 따옴표 안에 쓸 수 있다는 것을 의미합니다. 변수는 계속해서 마법처럼 확장됩니다.
"변수 보간법"이라고하는이 기능은 함수 호출에서는 발생하지 않습니다. 그래서 여기서하는 일은 문자열 "file_get_contents ($ tmp_image)"를 데이터베이스에 쓰는 것입니다.
따라서, file_get_contents ($ tmp_name)를 호출 한 결과를 연결하려면 문자열에서 뛰어 나와 명시 적으로 작업을 수행해야합니다.
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(이 구문이 어떻게 작동하는지 강조하는 구문에서도 알 수 있습니다.)
이제 문제는 바이너리 데이터에 '가 포함되어 있으면 쿼리가 유효하지 않다는 것입니다. 따라서 mysql_escape_string을 통해 실행하여 질의 연산을 위해 위생적으로 처리해야한다.
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
이제는 큰 문자열이 생겨 데이터베이스가 부피가 커지고 있습니다.
데이터베이스에 이미지를 저장하지 마십시오. 데이터베이스에서 이미지를 저장할 수 있습니다.
-
==============================
2.Tomalak의 코멘트를 확장하려면 따옴표 안에 함수를 실행할 수 없습니다.
Tomalak의 코멘트를 확장하려면 따옴표 안에 함수를 실행할 수 없습니다.
시험:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('{$this->image_id}','".file_get_contents($tmp_image)."')";
-
==============================
3.이 시도:
이 시도:
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . addslashes(file_get_contents($tmp_image)) . "')"; mysql_query($sql);
-
==============================
4.언급 한 바와 같이 "file_get_contents ($ tmp_image)"문자열을 db 대신에 file_get_contents 함수를 실행할 필요가 있습니다. db64에 저장하기 전에 base64_encode와 같은 해시 알고리즘을 사용하여 이미지를 해시하는 것을 잊지 마십시오.
언급 한 바와 같이 "file_get_contents ($ tmp_image)"문자열을 db 대신에 file_get_contents 함수를 실행할 필요가 있습니다. db64에 저장하기 전에 base64_encode와 같은 해시 알고리즘을 사용하여 이미지를 해시하는 것을 잊지 마십시오.
from https://stackoverflow.com/questions/7052655/insert-blobs-in-mysql-databases-with-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP 프로젝트를위한 배포 / 빌드 / CI주기 설정 (0) | 2018.09.14 |
---|---|
아약스와 PHP는 데이터베이스에 여러 양식 입력 입력 (0) | 2018.09.14 |
내 함수에 외부 변수 액세스 권한 부여 (0) | 2018.09.14 |
어떤 입력 파일을 지정하지 (0) | 2018.09.14 |
header ()를 사용하여 PHP로 파일 다운로드 강제 실행 (0) | 2018.09.14 |