質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel 4

Laravel 4 とはTaylor Otwellによって開発された、オープンソースなPHPwebアプリケーション開発フレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

0回答

888閲覧

Laravel sqlanywhereデータベースからデータ取り出す際に、文字化け

ZhengyuMeng

総合スコア0

Laravel 4

Laravel 4 とはTaylor Otwellによって開発された、オープンソースなPHPwebアプリケーション開発フレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/03/30 02:34

前提・実現したいこと

PHP(laravel)の初心者で、素朴な問題で申し訳ございませんでした。
既存のサーバーにあるsqlanywhereのデータベースから抽出する際に、
カラム名はすべて文字化けになっています。

環境:windows10 + PHP 7.3 + xampp + laravel4.1.1

extension josueneo/laravel5-sqlanywhereを使おうとしたが、
PDO Driverがないというエラーがあったため、現在はODBCで接続しています。

既存のデータベースのカラム名はすべて漢字で、変更できないため、
下記のように抽出したら、カラム名が文字化けになってしまいます。

array(30) {
[0]=>
array(5) {
["SEQ"]=>
string(3) "721"
["���ЃR�[�h"]=>
string(2) "11"
["EDI�f�[�^�L���敪"]=>
string(1) "2"
["���[���f�[�^�L���敪"]=>
string(1) "0"
["�o�^��"]=>
string(26) "2021-03-02 00:00:00.000000"
}

エンコードの問題だと思いますが、抽出したデータは、
mb_convert_encoding($value,"UTF-8","SJIS")で変換すれば、正常に表示は可能です。
しかし、SQLの中、where(カラム名,'=',???)で絞ることはできなく、
毎回、すべてのデータを抽出しなければならないので、非常に遅いです。

ODBCの設定がおかしいでしょうか。
何か解決策がありませんか。

発生している問題・エラーメッセージ

Illuminate\Database\QueryException
odbc_prepare(): SQL error: [SAP][ODBC Driver]�\���G���[�܂��̓A�N�Z�X�ᔽ�ł��B, SQL state 42000 in SQLPrepare (SQL: select * from "W_HATUF_CSV" where "EDIデータ有無区分" = 0)

該当のソースコード

$items=DB::connection('odbc') ->table('W_HATUF_CSV') ->where('EDIデータ有無区分','=',0) ->get(); var_dump($items);

試したこと

①database.phpでDSNのエンコードを変更して、追加してみたが、効果がない
'odbc' => [
'driver' => 'odbc',
'dsn' => 'DSN=Seisan2;UID=dba;Integrated=NO;Host=192.168.0.2',//;Charset=SJIS
'database' => 'DBA',
'host' => '192.168.0.2',
'username' => 'dba',
'password' => 'sql',
// 'charset' => 'utf8',
],

②検索したいカラム名をあえてUTF-8からSJISへ変換して、whereの中に入れたら、
Illuminate\Database\QueryException エラー:
Stack trace表示:
protected function runQueryCallback($query, $bindings, Closure $callback)

{ try { $result = $callback($query, $bindings); } catch (Exception $e) { throw new QueryException( $query, $this->prepareBindings($bindings), $e ); } return $result; }

補足情報(FW/ツールのバージョンなど)

sqlanywhere管理ツールSQL Central または A5:SQL Mk-2でデータベースをアクセスしたら、普通に表示できます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/30 05:19

そもそもlaravel4.1.1 でPHP7対応してないのでは。
ZhengyuMeng

2021/03/31 09:05

ご回答ありがとうございました。 確認不足で失礼しました。 php artisan --versionで調べたところ、Laravel Framework 8.32.1でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問