PHP MySQL 파일 내용이 탈출 문제
-
13-09-2019 - |
문제
PHP를 사용하여 .pdf 파일을 MySQL 데이터베이스에 업로드하려고합니다.
파일의 내용을 제외하고는 모두 좋습니다. 내가 특수 캐릭터를 탈출하려고하는 것처럼 보이면 쿼리는 항상 "알 수없는 명령 n"과 함께 실패합니다.
AddSlashes, mysql_real_escape_string, RemoveSlashes 등을 사용했습니다.
파일 내용을 피하는 방법에 대한 아이디어가 있습니까?
많은 감사,
해결책
이전에 다음 시퀀스를 사용했는데,이 순서는 잘 작동하는 것처럼 보이며 이미지, PDF, 데이터 배열 등을 포함하여 DB에 데이터를 저장합니다 ... :)
데이터 저장 (문자열, 배열, 객체 등이 될 수 있음);
먼저 데이터를 Base64 인코딩 된 문자열로 전환합니다.
$strData = strtr(
base64_encode(
addslashes(
gzcompress( serialize($dataToStore) , 9)
)
) , '+/=', '-_,');
그런 다음 해당 문자열 데이터를 DB에 저장하십시오 ...
데이터 검색;
DB에서 문자열 데이터를 추출하십시오
데이터를 원하는 것으로 다시 디코딩합니다 (입력 데이터, 배열, 이미지 등에 따라 추가 단계를 수행해야 할 수도 있습니다).
$returnData = unserialize(
gzuncompress(
stripslashes(
base64_decode(
strtr($strDataFromDb, '-_,', '+/=')
)
)
)
);
이것은 확실히 MySQL DB에 저장하는 데 필요한 것을 저장하는 데 도움이되었습니다!
다른 팁
왜 파일을 데이터베이스에 저장하고 싶은지 모르겠지만 살펴 보는 것이 좋습니다. 준비된 진술.
추측 : 문자 세트 사이의 비 호환성으로 인해 오류가 발생할 수 있습니다. PDF는 아마도 이진 파일 일 수 있으므로 DB 열이이를 처리하도록 설정되어 있는지 확인해야합니다.
이스케이프 문제 외에 (MySQL) 시스템 변수 인 경우 "패킷 너무 큰"오류가 발생할 수 있습니다. max_allowed_packet "작은"값으로 설정됩니다.
MySQLI 확장, 준비된 진술 및 mysqli_stmt :: send_long_data 두 가지 문제를 피할 수 있습니다.