Параметризация имени файла в ДАННЫХ ЗАГРУЗКИ MySQL INFILE

Существует ли способ динамично указать имя файла в ДАННЫХ ЗАГРУЗКИ INFILE? Это может быть параметризовано как, например (синтаксис может быть неправильным), ДАННЫЕ ЗАГРУЗКИ INFILE '$filename'?

5
задан skaffman 14 May 2010 в 10:06
поделиться

2 ответа

Цитата из документации MySQL :

Оператор LOAD DATA INFILE считывает строки из текстового файла в таблицу с очень высокой скоростью. Имя файла должно быть дано в виде буквальной строки.

Это означает, что он не может быть параметром подготовленного оператора. Но никто не запрещает делать строковую интерполяцию, пока оператор является просто строкой в ​​вашем PHP-коде.

2
ответ дан 14 December 2019 в 13:28
поделиться

Если вы спрашиваете, можно ли его использовать в сценарии; вы можете сделать что-то подобное с помощью php:

<?php
$mysqli = new mysqli("host", "user", "pwd", "db");
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}


$sql = "CREATE TABLE number1 (id INT PRIMARY KEY auto_increment,data TEXT)";
if ($result = $mysqli->query($sql)) {
} else {
printf("<br>%s",$mysqli->error);

}

$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$filename = "data.csv";

$sql = "LOAD DATA LOCAL INFILE '$host$uri$filename' INTO TABLE number1";
if ($result = $mysqli->query($sql)) {

} else {
printf("<br>%s",$mysqli->error);    
}
// Close the DB connection
$mysqli->close();

exit;
%>

Если файл находится в той же папке, что и сценарий, просто используйте $ filename a вместо $ host $ uri $ filename. Я быстро собрал это из пары скриптов, которые использую, извините, если он не работает без отладки, но это должно быть довольно близко. Требуется mysqli.

0
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: