Solution to the failure of PHP to save images into mysql database,
The example of this article analyzes the solution to the failure of PHP to save pictures into the MySQL database. Share it with everyone for your reference. The specific analysis is as follows:
It is not a wise idea to save pictures in the database. Most of us save the pictures to the server, and then save the picture address to the database. In this way, we only need to read the picture address every time to display it, but I will introduce it below. The solution to the problem of saving a picture to mysql database, the code is as follows:
Copy code The code is as follows:
require 'class/db.php';
$fileName = "a1.jpg";
$fp = fopen($fileName, "r");
$img = fread($fp, filesize($fileName));
fclose($fp);
$db->execute("insert db2.testimg (`img`) values ('$img') ;");
Error report:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`?绶q?仳!??? ?1丶> ,Mo?'^ W Z4in??T春??????U? 湹?' at line 1
The code is as follows:
Copy code The code is as follows:
$img = fread($fp, filesize($fileName));
$img = addslashes($img)
Continuing to report errors, various searches, the results in Baidu are all addslashes, or there are no addslashes at all, it is really nonsense.
Copy code The code is as follows:
base64_decode
$img = base64_encode($img);
The insertion is successful, the image file is 17.0k, come out and perform base64_decode, the display is normal, I found a hexadecimal method:
Copy code The code is as follows:
$img = bin2hex($img);
It works, the output does not need to be decrypted, and the database is 25K large, which is even more embarrassing than base64. I searched again, and later, I found that the image file uploaded directly by phpmyadmin can be used. The file is smaller than base64, the file is 12.8k.
Looking through the phpmyadmin source code, common.lib.php file 183 has a magical function, the code is as follows:
Copy code The code is as follows:
function PMA_sqlAddslashes($a_string = '', $is_like = false, $crlf = false, $php_code = false)
{
If ($is_like) {
$a_string = str_replace('', '\\', $a_string);
} else {
$a_string = str_replace('', '\', $a_string);
}
If ($crlf) {
$a_string = str_replace("n", 'n', $a_string);
$a_string = str_replace("r", 'r', $a_string);
$a_string = str_replace("t", 't', $a_string);
}
If ($php_code) {
$a_string = str_replace(''', ''', $a_string);
} else {
$a_string = str_replace(''', '''', $a_string);
}
Return $a_string;
} // end of the 'PMA_sqlAddslashes()' function$img = PMA_sqlAddslashes($img);
The file size is 12.8K, which is the same size as phpmyadmin.
For example, frontend image.html, the code is as follows:
Copy code The code is as follows:
Upload picture
The background processing upimage.php code is as follows:
Copy code The code is as follows:
//Insert pictures into the database
$imgfile=$_FILES['imgfile'];
$submitbtn=$_POST['submitbtn'];
if($submitbtn=='OK' and is_array($imgfile)){
$name=$imgfile['name']; //Get the image name
$type=$imgfile['type']; //Get the image type
$size=$imgfile['size']; //Get the image length
$tmpfile=$imgfile['tmp_name']; //The path to the temporary file where the image is uploaded
if($tmpfile and is_uploaded_file($tmpfile)){ //Determine whether the uploaded file is empty and whether the file is an uploaded file
//Read image stream
$file=fopen($tmpfile,"rb");
$imgdata=bin2hex(fread($file,$size)); //bin2hex() converts binary data into hexadecimal representation
fclose($file);
$mysqli=mysql_connect("localhost","root","123456″); //Connect database function
mysql_select_db("test"); //Select database
//Insert the database statement, add 0x before the image data, used to represent hexadecimal numbers
if(mysql_query("insert into images(name,type,image) values('".$name."','".$type."',0x".$imgdata.")"))
echo "
Inserted successfully!
Display image";
else
echo "
Insertion failed!";
mysql_close();
}else
echo "
Please select an image first!
Click here to return";
} else
echo "
Please select an image first!
Click here to return";
?>
Display the image disimage.php, the code is as follows:
Copy code The code is as follows:
mysql_connect("localhost","root","123456″);
mysql_select_db("test");
//Show the latest inserted picture
$result=mysql_query("select image from images where id=(select max(id) from images)");
$row=mysql_fetch_object($result);
header("Content-Type:image/pjpeg");
echo $row->image;
mysql_close();
?>
Conclusion:
PMA_sqlAddslashes is easy to use. The file size is 12.8k and the same size as the original image
bin2hex hexadecimal useful file 25K
base64_encode is easy to use, the output file requires base64_decode 17K
addslashes is not easy to use, continue to report the error and indicate that addslashes is easy to use on some Windows machines.
I hope this article will be helpful to everyone’s PHP programming design.
http://www.bkjia.com/PHPjc/933596.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/933596.htmlTechArticleSolution to the failure of php to save pictures into mysql database. This article analyzes the failure of php to save pictures into mysql database. solution. Share it with everyone for your reference. Specific points...