2012-02-23 44 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());作为最低限度的选项来检查查询是否失败。