(PHP 5, PHP 7)
mysqli::set_local_infile_handler -- mysqli_set_local_infile_handler — Задает callback-функцию для команды LOAD DATA LOCAL INFILE
Объектно-ориентированный стиль
Процедурный стиль
Задает callback-функцию для команды LOAD DATA LOCAL INFILE
Задача callback-функции состоит в том, чтобы считать данные из файла, заданного в LOAD DATA LOCAL INFILE, и преобразовать их в формат понятный для LOAD DATA INFILE.
Возвращаемые данные должны соответствовать формату, заданному в LOAD DATA
link
Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()
read_func
Callback-функция или объектный метод принимающий следующие параметры:
stream
PHP поток ассоциированный с SQL командами INFILE
&buffer
Строковый буфер для хранения перезаписанных данных
buflen
Максимальное количество символов, которое может вместить буфер
&errormsg
В случае ошибки сюда можно поместить ее описание
Callback-функция должна возвращать число символов, размещенное в буфере
buffer
или отрицательное число, если произошла ошибка.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #1 Пример использования mysqli::set_local_infile_handler()
Объектно-ориентированный стиль
<?php
$db = mysqli_init();
$db->real_connect("localhost","root","","test");
function callme($stream, &$buffer, $buflen, &$errmsg)
{
$buffer = fgets($stream);
echo $buffer;
// приведение к верхнему регистру и замена разделителя "," на [TAB]
$buffer = strtoupper(str_replace(",", "\t", $buffer));
return strlen($buffer);
}
echo "Входные данные:\n";
$db->set_local_infile_handler("callme");
$db->query("LOAD DATA LOCAL INFILE 'input.txt' INTO TABLE t1");
$db->set_local_infile_default();
$res = $db->query("SELECT * FROM t1");
echo "\nРезультат:\n";
while ($row = $res->fetch_assoc()) {
echo join(",", $row)."\n";
}
?>
Процедурный стиль
<?php
$db = mysqli_init();
mysqli_real_connect($db, "localhost","root","","test");
function callme($stream, &$buffer, $buflen, &$errmsg)
{
$buffer = fgets($stream);
echo $buffer;
// приведение к верхнему регистру и замена разделителя "," на [TAB]
$buffer = strtoupper(str_replace(",", "\t", $buffer));
return strlen($buffer);
}
echo "Входные данные:\n";
mysqli_set_local_infile_handler($db, "callme");
mysqli_query($db, "LOAD DATA LOCAL INFILE 'input.txt' INTO TABLE t1");
mysqli_set_local_infile_default($db);
$res = mysqli_query($db, "SELECT * FROM t1");
echo "\nРезультат:\n";
while ($row = mysqli_fetch_assoc($res)) {
echo join(",", $row)."\n";
}
?>
Результат выполнения данных примеров:
Входные данные: 23,foo 42,bar Результат: 23,FOO 42,BAR