プロが教えるわが家の防犯対策術!

こんにちは。サーバーはレンタルサーバーでSSHでログインしています。
mysqlでAデータベースに足してALL権限をもったユーザーuserを作りました。
しかしこのユーザーでmysqlにログインをしようとすると
ERROR 1045: Access denied for user: 'user@localhost' (Using password: YES)
と出てログインできません。
ユーザー名とパスワードはワードパットに先に記載してそれを見て何度も見直してユーザーを作成したので、間違えてはいないと思います。
前に違うユーザーを作ったときもログインできなかたのですが、これはやっぱりユーザー名かパスワードが間違えているのでしょうか???
後、ついでで申し訳ないのですが、エクセルのファイルをタグ形式のテキストで書き出してmysqlにインポートしたのですが、sshでmysqlでSELECTするとちゃんと表示されるのですが、PHPからmysqlにSELECTすると日本語が文字化けをしてしまいます・・・。
何が原因なのかわからないおですが、何か考えられる原因はありますか?
すみませんが、ご教授をよろしくお願いします。

A 回答 (5件)

自分のところで


$sql = "LOAD DATA LOCAL INFILE "ファイル" INTO TABLE テーブル名";
$rs = mysql_db_query($db,$sql);
をやってみましたが、できませんでした^^;

で、調査してみました。
どうもこれといった情報はなかったのですが、怪しい情報をいくつか。

1、ユーザをgrant するときに File_priv 権限をつけているか?
これをつけないとダメらしい。

2、to use load data local infile function from mysql (at mysql 4.0.16, php 4.3.3), set fifth parameter of mysql_connect() to CLIENT_LOCAL_FILES(128), which based on MYSQL C API ( also mysql server support load file, check by "show variables like 'local_infile' ")

mysql_connect()の第5のパラメーターをセットするらしい。
http://66.102.7.104/search?q=cache:XmZRRsX3RNUJ: …

ただし、
resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
パラメータclient_flagsはPHP 4.3.0で利用可能 となりました。

とあり、PHP4.3.0以下ではできないらしい

# でも私のPHPは4.3.3なのですが・・・

と、とりあえずここまで。
結局よくわかりませんでした。。
    • good
    • 0
この回答へのお礼

わざわざ調べていただいてありがとうございます。
私も調べてみたのですが、結局これ!!といったものはなく、わかりませんでした・・・。諦めずにもう少し探してみようかと思います。
ところでmysqlでユーザーを作った時にあるデータベースに対して権限をALLにして作成したらFile_priv 権限はそのデータベースに対してついていますよね???
昨日PHPからの実行でもSSHでmysqlにログインしての実行でもできたのですが、何故か今日、何もスクリプトを触らずにデータをアップしなおしたら両方ともダメになってしまいました・・・。PHPからはrootでログインしてもダメなんですが、こんなのってありなんですか???

お礼日時:2004/11/20 00:33

PHPはSQLにsql文を投げるだけなので、


SQLにsql文を投げてやればあとはSQLの方で処理するはずです。

$sql = "select * from xxx";
$rs = mysql_db_query($db,$sql);

といったようにやっているはずなので、投げるSQL文をそのまま

$sql = "LOAD DATA LOCAL INFILE "ファイル" INTO TABLE テーブル名";
$rs = mysql_db_query($db,$sql);

というようにやればできるのではないでしょうか?
(動作未確認ですが。)
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございます。
データをサーバーにアップしての
LOAD DATA INFILE
はできました。
しかし
LOAD DATA LOCAL INFILE ではできません・・・
SQL文を
$sql = "LOAD DATA LOCAL INFILE \"c:\\ファイル名\" INTO TABLE テーブル名";
をしていますが、何か問題はありますか?

お礼日時:2004/11/19 00:02

grant でユーザーを作成したときのコマンドと


ログインする時のコマンドを記述していただければ適切なアドバイスができるかもしれません。

また、mysqlテーブルが見えるのでしたら、
db と user を見れば登録されているか分かります。

文字化けはPHPとMysqlの文字コードの違いだと思います。
my.iniとphp.iniの文字コードを統一させれば文字化けは解消されると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ログインの方はユーザー名に'_'を入れないで作成するとログインできません。ユーザー名に_や-は使えないんですね。知りませんでした・・・。

文字化けについてはインポートするファイルをEUCで保存したらできました。
質問が続いて申し訳ないのですが、このインポートの作業をPHPからすることってできますか?
例えば必ず特定の場所に指定した名前でアップして貰ってそれをPHPでインポートするなんてことは可能なんでしょうか?
MySQLのデータをインポートするときに全て書き換えたいんです。さすがに一度の動作では無理でしょうがテーブルはそのままでテーブルの中身を全て削除するなんてことはできますか?
何度もすみませんが、よろしくお願いします。

お礼日時:2004/11/18 16:29

ファイルの文字コードが違っている場合。


・mysqlにインポートする際に指定ができるのならEUCで取り込む
・インポートするファイルをEUCで保存しておく

php.iniの設定が問題の場合ですが、以下のページを参考にして見てください。

参考URL:http://tsuttayo.sytes.net/php/char_trn/
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございます。
インポートするファイルをEUCで保存したらできました。
質問が続いて申し訳ないのですが、このインポートの作業をPHPからすることってできますか?
例えば必ず特定の場所に指定した名前でアップして貰ってそれをPHPでインポートするなんてことは可能なんでしょうか?
MySQLのデータをインポートするときに全て書き換えたいんです。さすがに一度の動作では無理でしょうがテーブルはそのままでテーブルの中身を全て削除するなんてことはできますか?
何度もすみませんが、よろしくお願いします。

お礼日時:2004/11/18 16:26

userテーブルにuserを追加するだけではなく、


dbテーブルに使用するテーブルとuserを追加して、mysqlをリロードすると指定したデータベースに対してアクセスできるようになります。

文字化けしてしまうのは、インポートした際のデータの文字コードとPHPで扱っている文字コードが違うためと思われます。
php.iniや.htaccessでPHPで扱う文字コードの指定ができるのでそれを変更すれば解消されると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
userの作成はgrantコマンドで権限をALL データベースは今回使用するデータベースのみを指定して作成したのですが、それだけじゃ足りないのですか?
ユーザー名に"_"をつけないで作成したら接続することができました。_やーは使えないってことなんでしょうかな???

文字化けなのですが、PHPとmysqlはEUC-JPで指定しています。サーバーもLinuxはShift-jisみたいなのですが、そこらへんが原因なのでしょうか?でもSSHでmysqlにログインをするとちゃんと表示されるのですが・・・。それともエクセルからtextに書き出すときに設定できるのでしょうか?
何度もすみませんが、よろしくお願いします。

お礼日時:2004/11/17 18:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!