uploadify php mysql - 批量上传和批量插入

时间:2011-05-27 01:29:57

标签: php mysql uploadify bulkinsert

我正在使用uploadify将图片上传到服务器。后端我正在使用PHP脚本。在PHP脚本中,除了复制到目标位置之外,我还在数据库中插入文件位置和其他一些细节。

问题: - 如果我上传了20个文件,PHP脚本将被调用20次,数据库插入语句将被调用20次以插入不同的图像。绝对调用数据库20次是这样做的低效方法。有没有什么方法可以保存文件名(和位置)并只调用一次插入语句(最后)一次插入所有20条记录?

感谢您的帮助

此致

基兰

1 个答案:

答案 0 :(得分:1)

我建议的一种方法是通过mysqli扩展名使用准备好的声明。引用主要优势:

  

使用准备的实际目的   sql中的语句是削减成本的   处理查询;不要分开   来自查询的数据。这就是它的存在   现在使用w / php,而不是它是怎么回事   旨在用于第一个   地点。使用SQL可以降低成本   执行多个类似的查询   使用准备好的声明   这样做会削减解析,   验证并且通常生成一个   所述查询的执行计划   面前。这就是他们跑得更快的原因   一个循环,而不是他们的IMMEDIATE查询   堂兄弟。

来源:http://us2.php.net/manual/en/mysqli.prepare.php#103730

举例说明如何利用这个:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if ($stmt = $mysqli->prepare("INSERT INTO `images` (`location`, `size`, `othervalues`) VALUES(?, ?, ?)")) {
  foreach($images as $image) {
    // s = string value
    // i = integer value
    $stmt->bind_param("sis", $image['location'], $image['size'], $image['othervalues']);
    $stmt->execute();
  }
  $stmt->close();
}
// Your prepared statement failed, handle the error
else {
}

$mysqli->close();

我建议您阅读mysqli::preparemysqli_stmt::bind_param,了解有关该过程如何运作的更多信息。我还建议您阅读prepared statements in the MySQL documentation