• 締切済み

pg_queryのエラー

 テキストボックスに入力された単語をスペースで区切って、それをSQL文に入れてデータベースを検索するプログラムを書いたのですが、ある特定のキーワードを入力すると以下のようなエラーが出ます。 Warning: pg_query(): Query failed: ERROR: invalid byte sequence for encoding "SJIS": 0x9125 in /**パス**/search.php on line 58 ↑は「早期」というキーワードを入れて検索した時に出たものです。DBには「早期終了」というデータがあるのですが、この場合は引っ掛かりません。「終了」というキーワードで検索すると出てきます。 クエリに失敗したというのは分かるんですが、SJISが出てくる意味が分りません。 文字コードの問題でしょうか? これはどうやったら解決できるんでしょうか?

  • rusya
  • お礼率56% (167/295)
  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

「invalid byte sequence for encoding」でぐぐった一発目ですけども http://shimax.cocolog-nifty.com/search/2005/06/invalid_byte_se_6658.html 文字コードがEUCの範囲外を指定されると出るエラーです。 POSTされたデータがsjisになっているのでしょう。 データをunpack()して検査すると分かるかもしれません。 対策としてはmb_convert_encoding()を噛ませばエラーは出なくなるかと思います。

rusya
質問者

補足

回答ありがとうございます。 やはり文字コードの問題なんですね…。ただ、ご指摘にあったmb_convert_encoding()を噛ませても一向に改善しません。EUC-JPにしても、SJISに指定しなおしてもダメでした。 ソースは元々すべてSJISで書いていて、設定もSJISになっているはずなのですが、他のソースは問題なく動くのに(DBへのインサートやアップデートなど)、問題の検索プログラムだけこのエラーが出ます。 他に確認する点はありますでしょうか?

関連するQ&A

  • pg_queryでinsert処理が出来ない

    環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 phpiniの文字コードの設定 PHPプログラムをShift_JISで保存し、ブラウザへEUC-JPで出力する csvデータを「Book1」読み込んで、 bbというテーブルに格納するために 以下のようにしましたが エラーになってしまいます。 ご教示して頂けたら幸いです。 --------------------------- if($_POST['action'] && $_POST['sign'] == 'up') { //ファイルを開く $fd = fopen ("c:\Book1.csv", "r"); //データを読み込む while (!feof ($fd)) { //「,」区切りでデータを分割 $line = split(",",fgets($fd, 50)); //クエリの実行 $sql = "insert into bb (syain,name,buka) values ('\{$line[0]}\','\{$line[1]}\',{$line[2]})"; pg_query($d_base,$sql); } } --------------------------- 「Book1」の内容 001,山田,100 002,佐藤,200 003,斉藤,300 ・ ・ ・ --------------------------- エラー内容 Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid byte sequence for encoding "EUC_JP": 000002 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". in C:\aa.php on line 48 山田

    • ベストアンサー
    • PHP
  • postgresqlとmysqlの違い

    こんにちは。 OSはRedhatLinux7.1を使っています。 Apache_1.3.26 php-4.2.1 PostgreSQL-7.2.1 mysql-3.23.52 を使ってWebアプリケーションを作ろうとしています。 Apache+php+PostgreSQLで、 SJISで書いたphpプログラム(htmlのページの表示もSJISに指定)を使って表示されたページからPostgreSQLにデータを登録しようとするとエラーになります。 Warning: pg_exec() query failed: ERROR: Invalid EUC_JP character sequence found (0x8971) となります。 同じようにApache+php+mysqlでやってみたら登録できます。 PostgreSQLはSJISでデータを登録できないのでしょうか? どこをどのようにすればいいのかわかりません。 初歩的で申し訳ありませんがアドバイスお願いします。

  • PostgreSQLでエラーinvalid byte sequence for encoding "EUC_JP": 0x9363

    教えてください。 ■環境 Apache2 PHP5 PostgreSQL8 すべて文字コードEUC-JP PHP5にてcsvファイルを取り込み mb_convert_encodingでSJIS→EUC-JPへと変換後 PostgreSQLへinsertしているのですが、 下記エラーが発生してしまいます。 PostgreSQLでエラーinvalid byte sequence for encoding "EUC_JP": 0x9363 http://shimax.cocolog-nifty.com/search/2005/06/invalid_byte_se_6658.html 上記にヒントがありますが、 解決に至っておりません。 取り込めないcsvデータを添付しますので、 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • psqlの文字コードエラー

    psqlでDBを作りたいのですが データを入力する際に、invalid byte sequence for encoding "EUC_JP"というエラーが出て日本語の入力ができません。 使用しているOSは Fedora Coreで 文字コードを UTP-8を変換しようとしています よろしくお願いします。

  • pg_restoreでエラー

    こんにちは。 PostgreSQL8.1.10を使っています。 pg_dumpでバックアップしたデータをpg_restoreでリストアするときに、エラーと警告が出てしまいます。 $ pg_dump -F c mydb > db.dump $ dropdb mydb $ pg_restore -C -d postgres db.dump pg_restore: [アーカイバ(db)] TOC処理中にエラーがありました: pg_restore: [アーカイバ(db)] TOCエントリ1514; 0 0 COMMENT SCHEMA public postgresのエラーです pg_restore: [アーカイバ(db)] could not execute query: ERROR: スキーマpublicの所有者でなければなりません Command was: COMMENT ON SCHEMA public IS 'Standard public schema'; pg_restore: WARNING: 権限を取り上げられませんでした pg_restore: WARNING: 権限を取り上げられませんでした pg_restore: WARNING: 権限は付与されませんでした pg_restore: WARNING: 権限は付与されませんでした 警告: リストアにてエラーを無視しました: 1 結果を確認した限りではリストアはされているようなのですが気になります。 このエラーはどういった理由で発生しているのでしょうか。 エラーを出さなくする方法はあるのでしょうか。 無視していいものならそれでも構わないのですが、理由は知っておきたいです。

  • pg_dumpでデータの引越し

    こんにちは。postgreSQL初心者です。 古いサーバからpostgreSQLのデータを pg_dumpもしくは、pg_dumpallで取り出し、新しいサーバに入れようとしてるのですが、以下のようなエラーが出てデータが入ってくれません。 ERROR: invalid byte sequence for encoding "UTF8": 0x8a HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". 文字コードの問題だと思うのですが、バージョンの違いや基本的な設定も関係あるのでしょうか? 環境 旧サーバ:Red hat Linux 9, postgreSQL 8.0 移転先サーバ:Fedora Core 6, postgreSQL 8.1 実行コマンド ダンプ pg_dump -d DB_NAME > FILE_NAME ※ファイルの中身はちゃんと出力されています。 リストア(?というのでしょうか?) 方法1: \i FILE_NAME > DB_NAME 方法2:cat FILE_NAME  | psql DB_NAME 両方ともエラーがでて、テーブルはできていても一部の中身が入りません。 行き詰まってしまっています。どうか宜しくお願いします。 また、現在設定されている文字コードを調べる方法や、お勧めの参考ホームページがございましたら教えてください。

  • postgreSQLとの併用

    osにFreeBSD、PHP、postgrsqlを用いての画像データベースを作成しています。 画像は指定したディレクトリにきちんと保存されるのですが、それに付随するコメントがencoding errorで格納されません。 “". Execution failure ERROR: invalid byte sequence for encoding "SJIS": 0x8d27 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".” “Execution failure ERROR: character 0xefbc of encoding "SJIS" has no equivalent in "UTF8"” というエラー文が出ているのでpostgresql.confのclient_encoding部分を #client_encoding=sql_ascii ↓ client_encoding=SJIS のように変更しました。 しかし未だに同様のエラーが出ています。 「大本命」や「普通二輪免許」のような言葉は通りますが、「テスト文」や「紅一点」のような言葉は通りません。 試しに「$comment = mb_convert_encoding($comment, "UTF8", "SJIS");」 を組み込んでみましたが、その結果は変わりませんでした。 原因がわからず困っています。 どうかお力添えをお願いします。

    • ベストアンサー
    • PHP
  • データベースリストア時にエラーがー

    RedHatのPostgresql7.2.4で稼動しているデータベースhogehogeを windowsの8.2.4で稼動させようとしています。 最初にpgdumpでデータベースhogehogeを取り出し、それをwindowsからFFFTPで取得、 その後pgADMINIIIでリストアしようとしましたが、 データを選択しても実行ボタンがアクティブにならなかったので、 コマンドラインを使って createdb -U postgres --encoding=EUC_JP hogehoge psql -U postgres -e -f c:\files\hogehoge hogehoge としました。 すると psql:c:/files/hogehoge:181: ERROR: invalid byte sequence for encoding "SJIS": 0xf309 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". CONTEXT: COPY hogehoge_hage, line 1 というようなエラーがいくつか出てきます。 client_encodingをEUC_JPにしてみましたがやはり同じエラーが 出ました。 元のRedHatでのエンコードはEUC_JPになっています。 どなたか解決法をご存知の方がおられましたらご教授お願いします。

  • Perlでの文字コード変換

    Windowsのフォルダに入っているファイル名をFedora Coreに入ってるpostgresのtableに入れたいのですが(perlで実行)文字の変換の仕方がわからず以下のメッセージが出て止まってしまいます。 DBD::PgPP::st execute failed: ERROR: invalid byte sequence for encoding "EUC_JP": 0x96d8 良い方法があれば教えてください。 **************************************** $query0 = 'insert into aaatbl (filename) values("$aaa"); $sth = $dbh->prepare("$query0"); $sth->execute; $sth->finish; ($query0 が S-JISでaaatblはECU-JP)

    • ベストアンサー
    • Perl
  • エラーと改行について

    「PostgreSQL」カテゴリと迷ったのですが、こちらに書込みをさせて いただきます。 まだPHPもPostgreSQLもやり始めたばかりの頃に、ShiftJISでDBを作成 したのですが、Accessでのデータ操作が出来るようにEUCでDBを作り 直し、そちらにデータを移行する作業を行っています。 一旦CSVファイルにDBの内容を出力し、新しいDBにデータを書き込むと いう手順で行っているのですが、その際に 「Warning: PostgreSQL query failed: ERROR: Invalid EUC_JP character sequence found (0xa12c) in ~」 というエラーが発生し、一部のデータが書き込まれません。また、改行 部分が無効になっています。(書込み部分で「<BR>に変換したものを「\n」に 変換しています。) 色々と調べていますが、今ひとつ原因がつかめません。どなたか解決法を お教えください。よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう