2016-10-12 1 views
1

Здравствуйте товарищи программисты,PHP MySQLi Rename File для идентификатора строки на Insert

Как переименовать мой файл в строку идентификатора при вставке в SQL?

Позвольте мне дать вам пример:

<?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); 
} 

?> 

Все входы оценены.

+0

Ваш ROW ID является первичным ключом автоматического приращения в MySQL или нормального поля? –

+0

Это автоматический приращение –

ответ

0

Пара способов обработки этого сценария, которые приведены ниже ..

  1. Прежде всего, необходимо найти следующее авто инкрементного значение в MySQL, чтобы получить текущего изображение ID строки
  2. переместить файл в нужное место на сервере с таблицей row id
  3. Вставить запись в 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); 
} 

?> 

ИЛИ

  1. сначала нужно выполнить MySQL вставки без идентификатора строки.
  2. fetch last insert id с помощью mysqli_insert_id() для получения идентификатора строки mysql.
  3. переместить файл в нужное место на сервере с идентификатором строки таблицы.
  4. Обновление последней вставленной записи в 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); 
} 

?> 
+0

Первый вариант - это не вариант. Пожалуйста, прочитайте что-нибудь о состоянии гонки. Этот «алгоритм» на самом деле является одной из основных ошибок, которые может сделать разработчик. –