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() 取消用户指定的回调函数