2012-02-23 93 views
0

我試着與使用文件傳輸API的發現得到的圖像:PhoneGap的文件傳輸API到MySQL PHP

http://docs.phonegap.com/en/1.0.0/phonegap_file_file.md.html#FileTransfer

到MySQL數據庫。我目前可以沒有任何問題地將它送到服務器,但是我找不到任何教程/代碼片段來說明如何將它送到Mysql。我目前有下面的代碼,但它只是每次返回「沒有圖像選擇」。

如果任何人有建議,鏈接等id非常偉大。

// Create MySQL login values and 
// set them to your login information. 
$username = ""; 
$password = ""; 
$host = ""; 
$database = ""; 

// Make the connect to MySQL or die 
// and display an error. 
    $link = mysql_connect($host, $username, $password); 
if (!$link) { 
die('Could not connect: ' . mysql_error()); 
} 

// Select your database 
mysql_select_db ($database); 

// Make sure the user actually 
// selected and uploaded a file 
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 

    // Temporary file name stored on the server 
    $tmpName = $_FILES['image']['tmp_name']; 

    // Read the file 
    $fp  = fopen($tmpName, 'r'); 
    $data = fread($fp, filesize($tmpName)); 
    $data = addslashes($data); 
    fclose($fp); 


    // Create the query and insert 
    // into our database. 
    $query = "INSERT INTO tbl_images "; 
    $query .= "(image) VALUES ('$data')"; 
    $results = mysql_query($query, $link); 

    // Print results 
    print "Thank you, your file has been uploaded."; 

} 
else { 

print「No image selected/uploaded」; }

// Close our MySQL Link 
mysql_close($link); 

回答

0
  1. 和addslashes()已過時,不可靠的,並且會導致你的悲傷。不要將其用於數據庫操作。這就是爲什麼有mysql_real_escape_string()
  2. 你有一個無效的方法來檢查成功的上傳。 _FILES數據將填充您正在檢查的內容,但即使上傳失敗,仍會填充該數據。您必須檢查$_FILES['image']['error'] == UPLOAD_ERR_OK以確保成功上傳DID。
  3. 不需要fopen/fread/filesize的東西。一個簡單的file_get_contents()將爲你減少麻煩。
  4. 你沒有錯誤檢查你的數據庫操作,並且假設它們都成功了。這真是太糟了。即使你的SQL語句是完美的寫入,但有其他許多原因,查詢可能會失敗。特別是當你插入blob時 - 你不檢查文件的大小,而是盲目地將其填入查詢中 - 這可能很容易超過MySQL配置的max_allowed_pa​​cket,從而導致查詢無效。您必須以mysql_query(...) or die(mysql_error());作爲最低限度的選項來檢查查詢是否失敗。