有没有更好的方法来使用mysql_insert_id()

时间:2013-11-18 15:56:34

标签: mysql sql

我有以下用PHP编写的sql语句。

$sql='INSERT INTO pictures (`picture`) VALUES ("'.$imgs[$i]['name'].'",)';
$db->query($sql);
$imgs[$i]['sqlID']      = $this->id=mysql_insert_id();
$imgs[$i]['newImgName'] = $imgs[$i]['sqlID'].'_'.$imgs[$i]['name'];
$sql='UPDATE pictures SET picture="'.$imgs[$i]['newImgName'].'" WHERE id='.$imgs[$i]['sqlID'];
$db->query($sql);

现在,这会将图像名称写入数据库表格图片。完成之后,我得到mysql_insert_id(),然后我将使用下划线更新名称前面的最后一个id的图片名称。

我会这样做以确保没有图片名称可以相同。导致所有这些图片保存在同一文件夹中。我第一次设置sql查询时是否有另一种方法来保存该ID?或者还有其他更好的方法来实现这一结果吗?

感谢所有建议

2 个答案:

答案 0 :(得分:1)

我认为在这种特殊情况下,在文件名中使用MySQL insert Id是合理的。在某些情况下可能需要它,但是你没有提供任何信息,为什么它会出现在这个中。

考虑类似的事情:

while( file_exists( $folder . $filename ) {
  $filename = rand(1,999) . '_' . $filename;
}

$imgs[$i]['newImgName'] = $filename;

当然,如果你想系统地增加用于为原始文件名添加前缀的数字,你可以使用更大范围的rand或循环计数器。

答案 1 :(得分:1)

使用原生auto_increment - 没有别的办法。您需要执行您描述的3个步骤。

正如Dan Bracuk所提到的,你可以创建一个存储过程来执行3次查询(执行后仍然可以获得插入ID)。

其他可能的选择是:

  • 不将id存储在文件名中 - 如果需要(选择时),可以在以后连接它
  • 使用ad-hoc自动增量而不是原生增量 - 在这种情况下我不推荐它,但它可能
  • 使用某种UUID而不是自动增量
  • 使用文件系统生成唯一的文件名(MarcellFülöp的回答)