Согласно комментарию, который я сделал, кажется, что вы хотите сохранить фактические данные файла, а не путь к файлу, поэтому используйте file_get_contents
для загруженного изображения - как это возможно ...
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "tbl_product";
$conn = new PDO( "mysql:host=$servername;dbname=$dbname", $username, $password );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
/*
catch errors
*/
try{
/*
test that imprtant variables are set
*/
if( isset( $_POST['update'], $_POST['name'], $_POST['price'] ) && !empty( $_FILES['image'] ) ) {
$name = $_POST['name'];
$price = $_POST['price'];
/*
get reference to uploaded image
*/
$obj=(object)$_FILES['image'];
$tmp=$obj->tmp_name;
$error=$obj->error;
/*
if there were no errors with upload, proceed to insert into db
*/
if( $error == UPLOAD_ERR_OK && is_uploaded_file( $tmp ) ){
/*
as the column is a longblob it suggests that you wish to store the actual file rather than the path
- this will lead to a mahoosive database in quite a short time!!
*/
$image=base64_encode( file_get_contents( $tmp ) );
$statement = $conn->prepare('INSERT INTO tbl_product (`name`, `image`, `price`) VALUES (:name, :image, :price)');
$args=array(
':name' => $name,
':image' => $image,
':price' => $price
);
$result = $statement->execute( $args );
} else {
throw new Exception('Upload failed');
}
}
}catch( Exception $e ){
exit( $e->getMessage() );
}
?>
Чтобы отобразить изображение, которое было сохранено как данные в кодировке base64, как указано выше, необходимо изменить синтаксис для тега img
. Например:
<img src='data:image/jpeg;base64, /9j/4AAQSkZJRgABAQEAYABgAAD//gA+Q1JFQVRPU...... etc etc