プロが教える店舗&オフィスのセキュリティ対策術

『PHP5逆引き大全500の極意』にあるサンプルスクリプトで
PHPとMYSQLと学んでいます。

XAMPPもインストールし、スタンドアロンでMysqlを操作しようと
しています。

しかし、どのサンプルスクリプトをいじっても接続できません。

require("config.php");

header("Content-Type: text/plain; charset=EUC-JP");

$db = odbc_connect(ODBC_CONNECT_DSN,
ODBC_CONNECT_USER,
ODBC_CONNECT_PASS)
or die("データソースに接続できません!\n");

でエラーがでています。
ちなみにconfig.phpの内容

// DSN
define("ODBC_CONNECT_DSN", "DSN=sample_db;");

// ユーザー名
define("ODBC_CONNECT_USER", "username");

// パスワード
define("ODBC_CONNECT_PASS", "password");

// テーブル名
define("ODBC_TABLE_NAME", "php500");

となっています。SQL文を実行し、テーブルを作りましたが、
上手く言っているかどうか・・・。
文字コードをちゃんと設定していないせいか、????????のような
データがカラムに入っています。

サンプルスクリプト上、データベースが自動作成されるスクリプトも
あるのですが・・・。

1.useename、userpassの設定
2.phpMyAdminでデータベースを作成する方法
3.データベース作成時の文字コードの設定。utf?sjis?

についてヒント頂けたら幸いです。

A 回答 (4件)

相手がmysqlならODBCを使わないで@mysql_connect(DBNAME,DBUSERNAME,DBPASSWORD);



で良いんじゃないでしょうか?

例 
$dbc = @mysql_connect( "sample_db", "username", "password" );
$sql = "select * from table";
$r = @mysql_query( $sql, $dbc );
if( $r ){
$l = @mysql_fetch_array($r);
}

この回答への補足

すみません、間違ったスクリプトで質問してしまいました。

// データベースに接続
$db = mysql_connect(MYSQL_CONNECT_HOST,
MYSQL_CONNECT_USER,
MYSQL_CONNECT_PASS)
or die("データベースに接続できません\n");

であってもdieの方のエラーメッセージが表示されてしまいます。
MYSQL_CONNECT_HOST,MYSQL_CONNECT_USER, MYSQL_CONNECT_PASS
のあたりが怪しいとにらんでいます。
パスワードとか設定した覚えがないです。

補足日時:2007/12/11 12:54
    • good
    • 0
この回答へのお礼

ちなみにエラーメッセージです。

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'username'@'localhost' (using password: YES) in C:\xampp\htdocs\sample\chapter3\3-5\412.php on line 47
データベースに接続できません

line 47には上記の
MYSQL_CONNECT_HOST,MYSQL_CONNECT_USER, MYSQL_CONNECT_PASS
が記載されています。

お礼日時:2007/12/11 12:57

データベースにユーザ権限が与えられていないようです。



データベースにログインして

grant all on sample_db.* to username@localhost;

を実行して、sample_db のデータベースにusername'@'localhostのアクセスを承認してください。

この回答への補足

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

やってみましたが、だめでした。同じエラーがでています。
でも、やり方はそういうことだと思います。
DOSで接続する方法がわからないのでphpMyadmin上から
上記SQLを実行してみました。エラーもでていないのですが
これがよくなかったのでしょうか?

補足日時:2007/12/12 21:55
    • good
    • 0
この回答へのお礼

ちなみにsample_dbを作ったときのsqlをはっておきます。

--
-- データベース
--

CREATE DATABASE IF NOT EXISTS sample_db;
USE sample_db;

--
-- テーブル
--

CREATE TABLE diary_user (
name CHAR(32) NOT NULL,
pass CHAR(32) NOT NULL,
PRIMARY KEY (name)
);

CREATE TABLE diary_auth (
uid CHAR(32) NOT NULL,
sid CHAR(32) NOT NULL,
life DATETIME NOT NULL,
PRIMARY KEY (uid)
);

CREATE TABLE diary_log (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
story TEXT NOT NULL,
modify DATE NOT NULL,
PRIMARY KEY (id,modify)
);

--
-- 管理用データ
--

INSERT INTO diary_user VALUES (md5('owner'),md5('admin'));

--
-- テスト用データ
--

INSERT INTO diary_log (title,story,modify) VALUES('テストタイトル','テストメッセージ',now());

お礼日時:2007/12/12 21:59

まず確認ですが


windows サーバにapache php mysql で全て同一サーバですよね

まずWindowsであれば、mysqlをインストールしたフォルダ
たとえば
C:\>cd \mysql\bin
に移動して、
mysql test 又は作成した mysql sample_dbでログインできると思います

あと確認ですが、usernameというユーザは追加しているんですよね。

※mysqlの作成コマンド
grant all on *.* to username identified by 'password';

もし、特権ユーザ(root)でアクセスしているなら、パスワードは設定していますか?

※特権ユーザーのパスワード設定
set password for root=password('設定するパスワード');

これでもダメでかつこのmysqlコマンドもうまく動かないようであれば、windowsによってポートが制限されているのかも
mysqlがデフォルトで起動しているのは3306ポートです。

ちなみにmysql_connectではなく、ODBCを使うなら管理ツールのデータソース(ODBC)の設定が必要です。(たしか・・
最近WindowsでDBつかってないからうろ覚えですが

幸運を祈ってます。

この回答への補足

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

>windows サーバにapache php mysql で全て同一サーバですよね

はい、1台のPCにXAMPPというソフトを入れました。
これですべての環境が整ってしまうようです。

>mysql test 又は作成した mysql sample_dbでログインできると思います

mysql sample_dbでログインしようとしたところ「ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO」

またmysql -u usernameとコマンドを打ってみたところ
↓↓
C:\Documents and Settings\KKK>mysql -u username
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 904
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

と出力されログインできているようなのですが・・・。

でも、そもそもmysql sample_dbでログインできないと駄目ですよね?

なにかヒントがあったらまたご助言よろしくお願い致しますm(__)m

補足日時:2007/12/14 01:48
    • good
    • 0

mysql sample_db -u username


だとどうですか?

この回答への補足

たびたびありがとうございます。

上記コマンドだと接続できませんでしたが、

C:\Documents and Settings\KKK>mysql -h localhost -u pma
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1112
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

と接続できました。phpMyadminからホスト名、ユーザ名を
見ることができ、上記コマンドを打ちました。

MySQL自体をわかっていない自分なのですが、
おそらくdifineのところのユーザー名がちがいますね。
ここが問題なのでしょうか?

補足日時:2007/12/15 01:49
    • good
    • 0
この回答へのお礼

自己解決ですが、ようやく接続できました。

// 接続設定
define("DIARY_DB_HOST", "localhost"); // ホスト名
define("DIARY_DB_USER", "root"); // ユーザー名
define("DIARY_DB_PASS", ""); // パスワード

接続設定を上記変更したところ接続できました。
Kaoneさんのご助言と書籍をもとにやってみました。
Kaoneさんのおかげです。
またよろしくお願いします。

お礼日時:2007/12/16 23:35

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