2011-05-27 97 views
0

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

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

感谢您的帮助

问候

基兰

+0

显示您的查询,您可以在一个查询中插入多个值在mysql中,并且您的脚本在一个循环中运行,直到它上传所有文件 – Ibu 2011-05-27 01:35:23

+0

谢谢@lbu您的评论。这里的问题不在于使用sql查询。将20个文件名和位置保存在一些临时位置。但uploadify不支持会话(按照我的理解) – Bujji 2011-05-27 11:37:38

回答

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

+0

感谢@onteria_您的回复。这里的问题是我甚至没有Image数组。如果我有图像阵列,我肯定可以写一个mysqli批量插入来执行一次。由于PHP被称为永远的文件,我只得到当前的文件名。一些如何我必须暂时存储所有文件。但是uploadify不支持会话(按照我的理解) – Bujji 2011-05-27 11:35:53