PHP MySQLi 在插入时将文件重命名为行 ID
Posted
技术标签:
【中文标题】PHP MySQLi 在插入时将文件重命名为行 ID【英文标题】:PHP MySQLi Rename File to Row ID on Insert 【发布时间】:2017-02-21 05:24:42 【问题描述】:各位程序员们好,
如何在插入 SQL 时将文件重命名为行 ID?
让我举个例子:
<?php
// File Properties
$file_name = $file['name'];
$file_tmp = $file['tmp_name'];
// File extension
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
// File destination
$file_rename = 'ROW ID' . $file_ext; // THIS IS WHERE THE ROW ID ARE NEEDED
$file_destination = 'uploads/' . $file_rename;
if(move_uploaded_file($file_tmp, $file_destination))
$connect = mysqli_connect('localhost', 'root', '', 'database');
$query = "INSERT INTO images (image_id, image_url) VALUES ('', '$file_destination')"; // THIS IS THE INSERT WHERE I NEED THE ROW ID
$result = mysqli_query($connect, $query);
?>
感谢所有输入。
【问题讨论】:
你的 ROW ID 是 mysql 中的主自增键还是普通字段? 自动递增 【参考方案1】:下面给出了几种处理这种情况的方法..
-
首先你需要在 mysql 中找到下一个自动增量值来获取当前图像行 id
将文件移动到服务器上具有表行 ID 的所需位置
在 mysql 中插入记录以将 $file_destination 存储在 mysql 中。
如下...
<?php
// File Properties
$file_name = $file['name'];
$file_tmp = $file['tmp_name'];
// File extension
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
//Perform mysql
$connect = mysqli_connect('localhost', 'root', '', 'database');
$query = "SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'images' AND table_schema = DATABASE( )"; // THIS IS WHERE YOU GET NEXT INCREMENTAL ROW ID VALUE
$next_insert_id = mysqli_query($connect, $query);
// File destination
$file_rename = $next_insert_id . $file_ext; // THIS IS WHERE THE ROW ID ARE NEEDED
$file_destination = 'uploads/' . $file_rename;
if(move_uploaded_file($file_tmp, $file_destination))
//Do update for that record in the database
$query = "INSERT INTO images (image_url) VALUES ('$file_destination')"; // THIS IS THE UPDATE
$result = mysqli_query($connect, $query);
?>
或
-
首先你需要在没有行ID的情况下执行mysql插入。
使用 mysqli_insert_id() 获取最后插入 id 以获取 mysql 行 id。
将文件移动到服务器上具有表行 ID 的所需位置。
更新 mysql 中最后插入的记录以将 $file_destination 存储在 mysql 中。
如下...
<?php
// File Properties
$file_name = $file['name'];
$file_tmp = $file['tmp_name'];
// File extension
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
//Perform mysql
$connect = mysqli_connect('localhost', 'root', '', 'database');
$query = "INSERT INTO images (image_url) VALUES ('')"; // THIS IS THE INSERT WHERE I NEED THE ROW ID
$result = mysqli_query($connect, $query);
$last_insert_id = mysqli_insert_id();
// File destination
$file_rename = $last_insert_id . $file_ext; // THIS IS WHERE THE ROW ID ARE NEEDED
$file_destination = 'uploads/' . $file_rename;
if(move_uploaded_file($file_tmp, $file_destination))
//Do update for that record in the database
$query = "UPDATE images SET (image_url) VALUES ($file_destination) WHERE image_id = $last_insert_id"; // THIS IS THE UPDATE
$result = mysqli_query($connect, $query);
?>
【讨论】:
第一个不是选项。请阅读有关比赛条件的内容。这种“算法”实际上是开发人员可以犯的最基本错误之一。以上是关于PHP MySQLi 在插入时将文件重命名为行 ID的主要内容,如果未能解决你的问题,请参考以下文章