(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