mysqli::set_local_infile_handler

mysqli_set_local_infile_handler

(PHP 5, PHP 7)

mysqli::set_local_infile_handler -- mysqli_set_local_infile_handlerLOAD 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() が返すリンク ID。

read_func

以下のパラメータを受け取るコールバック関数あるいはオブジェクトのメソッド。

stream

SQL の INFILE コマンドに関連付けられた PHP ストリーム

&buffer

入力を書き換えた内容を保存する文字列バッファ

buflen

バッファに格納する最大文字数

&errormsg

エラーが発生した場合にエラーメッセージを保存する場所

コールバック関数の返り値は、buffer に書き込んだ文字数となります。エラー発生時は負の値を返します。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

例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

参考