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的主要内容,如果未能解决你的问题,请参考以下文章

PHP,AJAX,MYSQLI,不插入行[重复]

MySQLi插入问题 - PHP 7.2.10

将文件重命名为consutive number

PHP 将文件重命名为小写

命令行 php mysqli 失败但通过 Web 服务器工作并在本地工作

PHP 将多个文件/目录重命名为小写,删除空格和有趣的字符