[PHP-users 14933]Re: 変数に容量際限があるのか

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2003年 4月 25日 (金) 17:03:16 JST


h_yamato @ infoseek.jp wrote in <20030425115816.h_yamato @ infoseek.jp> :
>ある大学の卒業論文をデータベース化する作業をしています。
>Googleのような文字列検索機能を付けたいとの要望から、

全文検索機能ですか?
確かにMySQLには、FullTextSearchを可能とする機能がありますが、
ちょっとしたトリックを使わないと日本語には利用できませんよ。

>この論文はpdf形式で持っていて、xPDFを用いて、
>文字列を抽出しています。文字コードはEUCに自動変換されます。
>ところが、PHPスクリプト内でInsert文を書き、
>クエリーを発行しようとすると、
>ある一定の文字数を超えると受け付けてもらえなくなってしまいました。
>(日本語のみで約40万文字くらい)
>ex.) $Text = "(xPDFで抽出した文字列)"
>      $Insert = "Insert into table set Ronbun = " . $Text;

これだと、長さに関係なく$Textに「', "]等が含まれた時、INSERT処理に
失敗しませんか?
というか、textフィールドに値を渡す時は
  Ronbun = '$text'
とシングルクオーテーションで囲まなくてもよいのかな?

>当初は、SQLレベルの話かと考えていたのですが、

そうだと思えます。

>MySQL用のツールからSQLを直接発行した場合には、
>文字列が切れることなく反映されているので、

mysqlコマンドでINSERTした訳じゃないですよね。
使ったツールは、フィールドタイプに合わせて、前述のクォート処理や
文字列内に出現するクォート文字のエスケープ処理を補完する機能を
有していませんか?

>PHPの変数として持たせることの出来る際限(?)が
>800kbぐらいなんでしょうか。

数Mバイトのファイルを読み込んで変数に入れても問題ありません。

<?php
  $fp = fopen("php-4.3.1.tar.bz2", "r");
  $file = fread($fp, filesize("php-4.3.1.tar.bz2"));
  echo strlen($file);
  fclose($fp);
?>
何等問題なし。

>PHPの問題なのか、MySQLの問題なのかさえも
>特定が出来ない状態なので、どうかよろしくお願いいたします。

コーディング及びSQLの問題だと思います。

-- 
Youichi Iwakiri



PHP-users メーリングリストの案内