PHP mysqli_set_local_infile_handler MySQLi 函数

  • 定义和用法

    mysqli_set_local_infile_handler - 设置 LOAD DATA LOCAL INFILE 命令的回调函数
  • 版本支持

    PHP4 PHP5 PHP7
    不支持 支持 支持
  • 语法

    mysqli_set_local_infile_handler ( mysqli $link , callable $read_func )
    
    设置 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。
  • 示例

    <?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";
      }
    
  • 相关函数

    mysqli_set_local_infile_default() - 取消用户指定的回调函数