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

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

新規登録して質問してみよう
ただいま回答率
85.42%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

4626閲覧

mysqlでデータベースへの接続はできるが

YamamotoHiroki

総合スコア57

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/03/01 08:39

編集2015/03/02 14:21

mysqlでデータベースを扱おうと試行錯誤しているのですがなかなかうまくいきません。
PHPを用いてmysqlに接続しphptestというデータベースのtweet_tblというテーブルに対してINSERT文を実行したいです。

lang

1<?php 2$connect = mysql_connect("localhost","31",""); 3 4if($connect){ 5 echo 1; 6}else{ 7 echo 2; 8} 9echo "<br>"; 10 11//SQLをUTF8形式で書くよ、という意味 12$result1 = mysql_query("SET NAMES utf8",$connect); 13 14if($result1){ 15 echo 1; 16}else{ 17 echo 2; 18} 19echo "<br>"; 20 21//phptestというデータベースに対してSQLを実行する 22$result2 = mysql_db_query( "phptest","insert tweet_tbl(account,contents,input_datetime) values('junchiba','test',sysdate())"); 23 24 25if($result2){ 26 echo 1; 27}else{ 28 echo 2; 29} 30 31echo "<br>"; 32 33//データベースとの接続を切る 34$result3 = mysql_close($connect); 35 36 37if($result3){ 38 echo 1; 39}else{ 40 echo 2; 41} 42echo "<br>"; 43?>

このコードの実行結果は

1
1
2
1

となります。
つまりmysql_db_query文がうまく実行できていないことから起こるエラーだと思っているのですがまずこちら間違いないでしょうか?
データベースの接続
utf8に文字コード設定
データベースとの接続を切断
の部分は返り値にtrueが返ってきているので問題ないと考えています。

クエリに手作業で
insert tweet_tbl(account,contents,input_datetime) values('junchiba','test',sysdate())
を入力して実行をするとエラーなしで成功するのですが
これをこのままコピペしてmysql_db_query文で実行するとなぜかエラーがでてしまいます。
なぜなのでしょうか?
phptestというデータベースは確かに作成しておりtweet_tblといったテーブル名にも間違いはないはずです。
他にエラーとなる理由は何かありますか?

ちなみに一番始めの
$connect = mysql_connect("localhost","31","");
の部分は普通
$connect = mysql_connect("localhost","root","");
と書くと思いますが、rootのまま実行すると実行結果は
2
2
2
2
となります。
31という数字は適当に入力してみるといけました。
ここの部分の謎もよく理解できておりません。
31だったらいける理由を教えていただきたいです。

MACを使っております。
MAMPを用いてmysqlとApacheを起動していてポート番号はそれぞれ
Apache:81
Nginx:8888
Mysql:3307
で接続しております。

これはポート番号80がなぜか使えなかったので自分なりに接続できる方法を探して見出した結果です
ポート番号が80で接続できていないからエラーが起こるのかな?という疑問も抱いたので記述しました。

よろしくお願いします。

--追記--

ユーザー認証や権限の問題だったようなので
新しくユーザーを作成しました

![イメージ説明]WIDTH:529

この状態で以下の文を実行すると

<?php $connect = mysql_connect("hiroki_%","hiroki",""); echo mysql_errno().": ".mysql_error()."<BR>"; エラーメッセージが 2005: Unknown MySQL server host 'hiroki_%' (20) のように表示されます。 (20)とはなんなのでしょうか?

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

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

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

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

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

guest

回答5

0

ユーザー「root」にパスワードを設定し
phpMyadminの直下のconfig.inc.phpでパスワードを直接変更することにより

$connect = mysql_connect("localhost","root","password");

で接続することができました!

投稿2015/03/03 16:54

YamamotoHiroki

総合スコア57

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

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

0

XAMPばかりでMAMPの経験はないんですが..
PHP・MySQLのバージョンはいくつですか?

投稿2015/03/03 05:42

編集2015/03/03 05:45
ng75510

総合スコア11

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

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

0

前の方も仰る通り、mysql_connectで31という数値を入れるのがちょっと変ですね。そこはユーザー名かと思います。私もよくMySQL(自宅サーバー:Xampp, レンタルサーバー:ロリポップ)を使いますが以下のような書き方をします。データはJavaScript側に送って処理させています。参考まで。

lang

1$dsn = 'mysql:dbname=mydbname;host=localhost'; 2$user = 'root'; 3$password = '*****'; 4$host= 'localhost'; 5$dbname = "mydbname"; 6 7try{ 8 if( !$con = mysql_connect($host, $user, $password) ){ 9 print "MySQL Connect Error"; 10 exit; 11 } 12 mysql_set_charset("utf8"); 13 mysql_select_db( $dbname, $con ); 14 15 $result = mysql_query("SELECT * FROM MYTABLE", $con); 16 $data=''; 17 while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) ){ 18 $data .= $row['ID'] .','. $row['NAME'] .','. $row['AGE'] .'<-- line -->'; 19 } 20 print $data; 21}catch (Exception $e){ 22 print('Error:'.$e->getMessage()); 23 die(); 24 exit(0); 25}

投稿2015/03/01 12:24

Satoshi71

総合スコア26

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

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

YamamotoHiroki

2015/03/02 03:59

ユーザー名をrootにして実行するとエラーが出ます $connect = mysql_connect("localhost","root",""); echo mysql_errno().": ".mysql_error()."<BR>"; とするとエラーメッセージはこうです。 1045: Access denied for user 'root'@'localhost' (using password: NO) また、レンタルサーバーは使用していません。 ローカル開発環境です。
guest

0

ベストアンサー

まずはどんなエラーが返ってきているかを確認してみてください。

■mysql_errno — 直近の MySQL 処理からエラーメッセージのエラー番号を返す
http://php.net/manual/ja/function.mysql-errno.php

これでエラーメッセージなどを表示してやると、
次のアクションをどう取ればよいかわかります。

投稿2015/03/01 09:16

munyaX

総合スコア783

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

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

YamamotoHiroki

2015/03/02 03:51

1044: Access denied for user ''@'localhost' to database 'phptest' ありがとうございます! このようなエラーメッセージが表示されました。 アクセス権限の問題ですかね? やはりユーザー名を31で接続していることが問題なのでしょうがどうすればrootでつなぐことができるのでしょうか。。
YamamotoHiroki

2015/03/02 04:26

リンク先のところで調べてもいまいちわからなかったので質問なのですが CREATE USER '{username}'@"{from_domain(ipaddress)}" IDENTIFIED BY "{password}"; こちらの{from_domain(ipaddress)}は localhost でいいのでしょうか? それともIPアドレスを入力するのですか? 迅速な回答ありがとうございます!
munyaX

2015/03/02 04:54

IPでもホスト名でもどちらでも大丈夫ですよー。 grant all on dbname.* to username@localhost identified by 'password'; grant all on dbname.* to username@127.0.0.1 identified by 'password';
YamamotoHiroki

2015/03/02 12:33

丁寧にありがとうございます! ユーザーは作成できたのですがやはり接続ができません。 質問に状況を追記しましたのでもしよろしければお力添えください。
munyaX

2015/03/02 12:56

追記した形跡がないのですが……。 > ユーザーは作成できたのですがやはり接続ができません。 繰返しになりますが、エラーメッセージを書いてください。 また最新のプログラムと、コマンドラインなどでMySQLにrootでログインし以下のSQLを実行し、その結果を貼り付けてください。 > SHOW GRANTS FOR "作成したユーザー名"
YamamotoHiroki

2015/03/02 17:53

度々ありがとうございます。 追記がきちんと反映されていませんでした。。 追記し直しましたのでよろしくお願いします。 最新のプログラムとはコードのことですか? 最初の方しかいじっておりませんがこちらになります <?php $connect = mysql_connect("hiroki_%","hiroki",""); echo mysql_errno().": ".mysql_error()."<BR>"; if($connect){ echo 1; }else{ echo 2; } echo "<br>"; //SQLをUTF8形式で書くよ、という意味 $result1 = mysql_query("SET NAMES utf8",$connect); if($result1){ echo 1; }else{ echo 2; } echo "<br>"; //phptestというデータベースに対してSQLを実行する $result2 = mysql_db_query( "phptest","insert tweet_tbl(account,contents,input_datetime) values('junchiba','test',sysdate())"); echo mysql_errno().": ".mysql_error()."<BR>"; if($result2){ echo 1; }else{ echo 2; } echo "<br>"; //データベースとの接続を切る $result3 = mysql_close($connect); if($result3){ echo 1; }else{ echo 2; } echo "<br>"; ?> 実行結果は 2005: Unknown MySQL server host 'hiroki_%' (20) 2 2 1044: Access denied for user ''@'localhost' to database 'phptest' 2 2 となります。 >コマンドラインなどでMySQLにrootでログインし コマンドラインでmysqlと入力し実行すると -bash: mysql: command not found と表示されます これを解決しようと以下サイトを参考に以下文を実行しましたがなぜかサイトの通りにいきませんでした。。 http://webkaru.net/mysql/mamp-command-line/ 結果 Yamamoto-no-MacBook-Air:bin kamarudo$ pwd /Applications/MAMP/Library/bin Yamamoto-no-MacBook-Air:bin kamarudo$ ./mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) Yamamoto-no-MacBook-Air:bin kamarudo$
munyaX

2015/03/03 01:19

まず、 > 2005: Unknown MySQL server host 'hiroki_%' (20) サーバ自体につながっていないようですね。 MySQLが動いているサーバ名(ホスト名)は「'hiroki_%'」で間違いないですか?
YamamotoHiroki

2015/03/03 03:47

MySQLが動いているサーバー名は localhost:3307 だと思います。
munyaX

2015/03/03 03:49

> MySQLが動いているサーバー名は > localhost:3307 > だと思います。 そうだとしたら、以下のコードはご自身で正しいと思いますか? > $connect = mysql_connect("hiroki_%","hiroki","");
YamamotoHiroki

2015/03/03 12:24

なるほど、、 $connect = mysql_connect("localhost:3307","hiroki",""); ですかね? ごちゃしてきたので一旦整理して質問し直します。
munyaX

2015/03/03 15:45

> ですかね? ドキュメントは見ましたか? 見ないで当てずっぽうで回答していませんか?当てずっぽうのままではこれ以上の成長はできませんよ。 また、ユーザー「hiroki」を作成する際にパスワードは設定されませんでしたか?
YamamotoHiroki

2015/03/03 16:54

見ました、あてずっぽうのつもりはありませんがあてずっぽうに見えるほど間違っているということでしょうか汗 passwordは設定しました! 入力し忘れていました。。 質問に答えていただいているうちに少しだけ理解してきて ユーザー「root」にパスワードを設定し phpMyadminの直下のconfig.inc.phpでパスワードを直接変更することにより $connect = mysql_connect("localhost","root","password"); で接続することができました! 度々お返事いただき誠にありがとうございます。 また、私自身の成長を促すようなご指導の仕方感謝しております。
munyaX

2015/03/04 02:05

> 見ました、あてずっぽうのつもりはありませんがあてずっぽうに見えるほど間違っているということでしょうか汗 たぶんパスワードを設定してそうなのに書かれてないなぁと思ったのと、なんで試してないんだろう?というところからの推測です。 まぁ何はともあれ、ひとまずつながったようでよかったです。 肝心のINSERTの方も大丈夫でしたか?
YamamotoHiroki

2015/03/04 10:23

はい! パスワードを設定したことでそこもクリアできたみたいです。
munyaX

2015/03/04 10:45

なるほど、解決したようで良かったです。 またこれに懲りず、質問してみてください。ではでは。
guest

0

mysql_connectで「31」を入れると繋がるというのは不思議ですね。
パラメータ的には
1. ホスト名:ポート番号
2. ユーザ名
3. パスワード
でいけたと思いますが、MySQLへアクセスできるユーザは作成していますでしょうか?
(もしかしたらユーザ作成してなくて、権限なしの可能性はあるかな〜と・・・)

権限を持ったユーザじゃないとクエリ発行時にエラーが起きると思うので、
mysql_db_queryでのエラーもその辺りかもしれませんね。

投稿2015/03/01 11:08

in10tion.tak

総合スコア5

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

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

YamamotoHiroki

2015/03/02 03:55

>MySQLへアクセスできるユーザは作成していますでしょうか? この辺りの理解がまだ乏しくてユーザー作成できているのかどうかわかりません。 ユーザー作成をした覚えはありませんがユーザー作成とはどういったことを言うのでしょうか? phpmyadminのページが表示されている時点でユーザー作成できているといっていいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問