mysqli::set_local_infile_handler

mysqli_set_local_infile_handler

(PHP 5, PHP 7)

mysqli::set_local_infile_handler -- mysqli_set_local_infile_handler设置 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

设置 LOAD DATA LOCAL INFILE 命令的回调函数

回调函数的作用是读取 LOAD DATA LOCAL INFILE 命令指定的文件, 并且将其重新格式化。 所用的格式必须是 LOAD DATA INFILE 命令可以识别的格式。

返回的数据需要和 LOAD DATA 命令指定的格式匹配。

参数

link

仅以过程化样式:由mysqli_connect()mysqli_init() 返回的链接标识。

read_func

一个回调函数,或者对象的方法,它需要接收以下参数:

stream

和 SQL 命令中的 INFILE 关联的 PHP 流

&buffer

用来保存输入数据重写之后数据的字符串缓冲区

buflen

缓冲区中存储的最大的字符数量

&errormsg

如果发生错误,可以用这个变量存储一些错误信息

如果处理成功,则回调函数需要返回 buffer 中存储的字符数量, 如果处理失败, 返回一个负数。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

范例

Example #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 
"Input:\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 
"\nResult:\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 
"Input:\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 
"\nResult:\n";
  while (
$row mysqli_fetch_assoc($res)) {
    echo 
join(","$row)."\n";
  }
?>

以上例程会输出:

Input:
23,foo
42,bar

Output:
23,FOO
42,BAR

参见

关注编程学问公众号