• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mysqli::set_local_infile_handler()

    (PHP 5, PHP 7)

    设置 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
    

    参见

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