MySQL、PHPについて質問です。


別ドメインから接続するために、
下記の通り書きましたがうまく機能しません。

<?php
$link = mysql_connect('localhost:ポート番号','ユーザー名','パスワード');
if (!$link) {
die('接続できませんでした: ' . mysql_error());
}
echo '接続に成功しました';
mysql_close($link);
?>

エラーメッセージは下記の通りです。
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ユーザー名'@'localhost' (using password: YES) in C:\xampp\(中略).php on line 2
接続できませんでした: Access denied for user 'ユーザー名'@'localhost' (using password: YES)

環境はPHP5、XP、最新のXAMPPを使用しています。
サーバーは80code.comです。

いろいろ試してみましたがどうしてもうまくいきません。
どうしたらよいか教えてください。
なお、質問者は初心者ですので解答は具体的な
スクリプトを教えてもらえると嬉しいです。
以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/07/15 00:44:05
  • 終了:2008/07/15 22:17:26

回答(2件)

id:sphire No.1

sphire回答回数115ベストアンサー獲得回数122008/07/15 01:56:12

ポイント28pt

XAMPPを入れたPCの話ですよね?80codeは関係ないですよね?

80codeから提供されたDB接続ユーザー・パスワードはローカルのXAMPPとは関係ありませんよ。

ローカルのMySQLに接続したければ、MySQLにDBとユーザーを作成しなければいけません。

CREATE DATABASE test_db;

GRANT ALL PRIVILEGES ON test_db.* TO test_user@localhost IDENTIFIED BY 'test_pw';

この状態で

$link = mysql_connect('localhost:3306','test_user','test_pw');

です。

id:taroemon

ご回答ありがとうございます。


>XAMPPを入れたPCの話ですよね?80codeは関係ないですよね?

80codeで設定済みのデータベースにアクセスする方法が知りたいということです。


現在はテスト段階なので、ローカルパソコンからのアクセスですが、

将来的には別のアカウント、ドメインを取り直して、

そこからそのデータベースにアクセスするということを視野に入れて質問しました。


私の質問の仕方が悪くてすみません。

またお時間があったらぜひ教えてください。

2008/07/15 03:02:29
id:tezcello No.2

tezcello回答回数459ベストアンサー獲得回数692008/07/15 13:58:17

ポイント42pt

「$link = mysql_connect('localhost:ポート番号','ユーザー名','パスワード');」   

でlocalhostにポート番号を設定していれば80code側に

アクセスできると思ったのですが違いますか?

違います。

コメントした通り、その例では、localhost にアクセスします。

(だから、最初の回答者さんが「80codeは関係ないですよね?」となったのだと思います)

80code にアクセスしたいのなら、

$link = mysql_connect('hoge.80code.com:ポート番号','ユーザー名','パスワード');

の様になるでしょう。

第1引数は接続先サーバですし、localhost は自分自身を指す言葉ですから。

http://jp.php.net/manual/ja/function.mysql-connect.php

質問に書いてあります通り、「(using password: YES)」というメッセージは

パスワードは合ってるんだけどね。ということだと思ったのですが違いますでしょうか?

よくは理解していませんが、「パスワードが合っている」なんて事をサーバが答えるのはセキュリティ的に拙くないですか?

パスワードを使っている(使おうとしている)と言っているだけの様に思えます。

id:taroemon

tezcelloさん


いつも丁寧な回答ありがとうございます。

第一回答者の方が誤解されたのも私の質問の書き方が悪かったからです。

ちょっと違うエラーが出てきました。

なんか一歩前進したような気がするのですが、

いただいた回答を元にいろいろ入力値を変更して試してみます。


>「パスワードが合っている」なんて事をサーバが答えるのは

>セキュリティ的に拙くないですか?

本当にその通りですね。

自分の想像力のなさに愕然としてしまいました。

2008/07/15 22:11:48
  • id:Mook
    今回の意図は、WEB サーバと DB サーバが同一での環境でしょうか。
    PHP での localhost はPHPが動いている環境自身を指します。

    「別ドメインから接続するために、」という部分が、どのような設定を指しているのか不明ですので、
    補足説明をお願いできますか。
  • id:taroemon
    Mookさん
    コメントありがとうございます。
    私の質問の仕方が悪くすみません。

    >今回の意図は、WEB サーバと DB サーバが同一での環境でしょうか。
    どちらも80codeでやる予定ですが、違うドメインという設定です。
    現在のところはデータベースのみ80codeにおいており、
    テストとしてそれにアクセスしたいということです。

    これでいただいたコメントに対する回答になってますでしょうか?
    またトンチンカンなことを言ってないか正直心配です。
    もしお時間があればぜひ教えてください。
  • id:tezcello
    > >XAMPPを入れたPCの話ですよね?80codeは関係ないですよね?
    > 80codeで設定済みのデータベースにアクセスする方法が知りたいということです。

    > 現在のところはデータベースのみ80codeにおいており、
    > テストとしてそれにアクセスしたいということです。

    「今」やろうとしているのは、
    1.ローカルのPCから 80code の MySQL にアクセスする
    2.ローカルのPCからローカルの MySQL にアクセスする
    のどちらでしょうか?
    $link = mysql_connect('localhost:ポート番号','ユーザー名','パスワード');
    となっているので、localhost へ接続しようとしていますが?

    エラーメッセージは、アクセス権が無いという事らしいです。
    ここで指定しているユーザ名、パスワードは接続しようとしているサーバ(例ではlocalhost)において有効なものですか?
  • id:taroemon
    tezcelloさん
    いつもありがとうございます。

    >「今」やろうとしているのは、
    肝心なことを書いたつもりがすっかり抜けてました。すみません。
    やろうとしているのは、
    「1.ローカルのPCから 80code の MySQL にアクセスする」です。

    将来的には80code内のデータベースを80code内の他ドメインから
    アクセスさせたいということを視野に入れています。

    >ここで指定しているユーザ名、パスワードは接続しようとしている
    >サーバ(例ではlocalhost)において有効なものですか?
    なにぶん初心者ですのでこういうご指摘はありがたいです。
    いろいろ試してみます。

    ここからは私の解釈ですが、どこかにに勘違いがあると思うのです。
    もしそうであればご指摘いただきたいです。

    「$link = mysql_connect('localhost:ポート番号','ユーザー名','パスワード');」   
    でlocalhostにポート番号を設定していれば80code側に
    アクセスできると思ったのですが違いますか?

    質問に書いてあります通り、「(using password: YES)」というメッセージは
    パスワードは合ってるんだけどね。ということだと思ったのですが違いますでしょうか?
    設置したデータベースはちゃんと動いていて、そのユーザー名とパスワードと
    同じ物を使用しているので、それからも間違ってないと思います。

    あと、このコメントに対する回答はポイントの支払いに値すると考えてますので、
    回答欄でお知らせいただけると幸いです。よろしくお願いします。
  • id:kn1967
    横から失礼

    localhost というのは自分自身(貴方の使っているパソコン)を意味します。
    3306というポート番号はMySQLが標準で使っているものですから
    localhost:3306 という指定であれば「自分自身のポート3306に対して接続する」ことを意味します。

    IPアドレスというものは既にご存知かと思いますが
    ポートはどうでしょうか?
    ポートは1つのIPアドレスに対して数万あります。
    IPアドレスが会社名だとすればポート番号は内線番号のようなものです。

    80番と言えばWebサーバソフトに繋がりますし
    25番と言えばメールというように処理が分かれていきます。
    3306番は・・・MySQLですね。

    だから、あなたが80code上のMySQLに他のドメインから繋ぎたいのであれば
    localhostではなくて80code(具体的には貴殿が借りているアドレス)を書かなければなりません。

    私から助言させていただけるのはココまでです。
    それは80codeのMySQLを別のドメインから直接操作する方法を知らないからです。
    (80codeのサーバ仕様を知らないから回答欄には投稿しませんでした)
    そもそも80codeは3306番を外部に公開しているのでしょうか?
    セキュリティを考えるならば非公開にしているものと思います。
    回答しているお歴々も、そのあたりはご存知ないものと思いますので
    まずは、そのあたりを80codeのサポートにメール確認なさる事をお勧めします。
  • id:taroemon
    kn1967さん
    親切なコメントありがとうございます。
    たくさん勉強になりました。

    IPアドレスもポートも名前は知っていて、少しばかりの知識はありましたが、
    ちゃんと理解していなかったかもしれません。
    これをきっかけに勉強し直してみます。

    私の質問の仕方が悪かったせい皆さんが誤解してしまってるかもしれません。
    それは私も自覚しているところです。
    初心者で学習中の身です。平にご容赦ください。
  • id:sphire
    実は過去に80codeを使っていました。
    で、id:taroemon さんの書かれている通り80codeはMySQLを外部に公開していません。
    というか、レンタルサーバで外部にパスワード接続のMySQLを晒しているところは無いと思います。
    (あったら私の無知です。すみません)
    ローカルで同等のDBを作成してテストするのがよいかと。
  • id:taroemon
    sphireさん
    コメントありがとうございます。
    できないということがわかっだけでも勉強になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません