No puedes subir archivos "de php a mysql", a no ser que quieras guardar los archivos en la base de datos codificados en base64, que no creo que sea lo que quieras.
Por lo general para las subidas de archivos se usa una carpeta en el disco duro en la cual el usuario que arranca el servidor web (www-data suele ser, siempre que el servidor corra bajo unix) tiene permisos de escritura.
Para subir un archivo creando un formulario en HTML con la codificación mulipart/form-data. Algo así:
HTML:
<form action="file-handler-script.php" method="POST" enctype="multipart/form-data">
<input type="file" name="miarchivo" />
<input type="submit"/>
</form>
Donde pone file-handler-script.php debe ir la ruta relativa desde la raiz web hacia el script php que procesará el archivo, que debe contener algo parecido a esto:
PHP:
<?php
if(isset($_FILES['miarchivo'])){
$errors= array();
$file_name = $_FILES['miarchivo']['name'];
$file_size =$_FILES['miarchivo']['size'];
$file_tmp =$_FILES['miarchivo']['tmp_name'];
$file_type=$_FILES['miarchivo']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['miarchivo']['name'])));
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"images/uploaded".$file_name);
echo "Success";
}else{
print_r($errors);
}
}
?>
En este caso el script que procesa comprueba que la extensión sea jpeg, jpg o png y el tamaño menor a 2Mb, si es así lo guarda a la carpeta images/uploaded en el servidor.