mysqli::set_local_infile_handler

mysqli_set_local_infile_handler

(PHP 5, PHP 7)

mysqli::set_local_infile_handler -- mysqli_set_local_infile_handler Задает callback-функцию для команды LOAD DATA LOCAL INFILE

Описание

Объектно-ориентированный стиль

mysqli::set_local_infile_handler ( mysqli $link , callable $read_func ) : bool

Процедурный стиль

mysqli_set_local_infile_handler ( mysqli $link , callable $read_func ) : bool

Задает 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

Смотрите также