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 命令的回调函数
说明
面向对象风格
过程化风格
设置 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