mysqlでデータベースへの接続はできるが
- 評価
- クリップ 1
- VIEW 3,734
PHPを用いてmysqlに接続しphptestというデータベースのtweet_tblというテーブルに対してINSERT文を実行したいです。
<?php
$connect = mysql_connect("localhost","31","");
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())");
if($result2){
echo 1;
}else{
echo 2;
}
echo "<br>";
//データベースとの接続を切る
$result3 = mysql_close($connect);
if($result3){
echo 1;
}else{
echo 2;
}
echo "<br>";
?>
このコードの実行結果は
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で接続できていないからエラーが起こるのかな?という疑問も抱いたので記述しました。
よろしくお願いします。
--追記--
ユーザー認証や権限の問題だったようなので
新しくユーザーを作成しました

この状態で以下の文を実行すると
<?php
$connect = mysql_connect("hiroki_%","hiroki","");
echo mysql_errno().": ".mysql_error()."<BR>";
エラーメッセージが
2005: Unknown MySQL server host 'hiroki_%' (20)
のように表示されます。
(20)とはなんなのでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
■mysql_errno — 直近の MySQL 処理からエラーメッセージのエラー番号を返す
http://php.net/manual/ja/function.mysql-errno.php
これでエラーメッセージなどを表示してやると、
次のアクションをどう取ればよいかわかります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
$dsn = 'mysql:dbname=mydbname;host=localhost';
$user = 'root';
$password = '*****';
$host= 'localhost';
$dbname = "mydbname";
try{
if( !$con = mysql_connect($host, $user, $password) ){
print "MySQL Connect Error";
exit;
}
mysql_set_charset("utf8");
mysql_select_db( $dbname, $con );
$result = mysql_query("SELECT * FROM MYTABLE", $con);
$data='';
while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) ){
$data .= $row['ID'] .','. $row['NAME'] .','. $row['AGE'] .'<-- line -->';
}
print $data;
}catch (Exception $e){
print('Error:'.$e->getMessage());
die();
exit(0);
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
PHP・MySQLのバージョンはいくつですか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
phpMyadminの直下のconfig.inc.phpでパスワードを直接変更することにより
$connect = mysql_connect("localhost","root","password");
で接続することができました!
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
パラメータ的には
1. ホスト名:ポート番号
2. ユーザ名
3. パスワード
でいけたと思いますが、MySQLへアクセスできるユーザは作成していますでしょうか?
(もしかしたらユーザ作成してなくて、権限なしの可能性はあるかな〜と・・・)
権限を持ったユーザじゃないとクエリ発行時にエラーが起きると思うので、
mysql_db_queryでのエラーもその辺りかもしれませんね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/03/02 12:51
ありがとうございます!
このようなエラーメッセージが表示されました。
アクセス権限の問題ですかね?
やはりユーザー名を31で接続していることが問題なのでしょうがどうすればrootでつなぐことができるのでしょうか。。
2015/03/02 12:58
とりあえずrootでつなぐのは止めましょうw
MySQLの方でSQLを発行するユーザーを追加し、
http://qiita.com/tsumekoara/items/d79254a1c791bb38ae8e
追加したユーザーの情報をmysql_connectする際に記入しましょう。
> mysql_connect('localhost', 'mysql_user', 'mysql_password');
http://php.net/manual/ja/function.mysql-connect.php
2015/03/02 13:26
CREATE USER '{username}'@"{from_domain(ipaddress)}" IDENTIFIED BY "{password}";
こちらの{from_domain(ipaddress)}は
localhost
でいいのでしょうか?
それともIPアドレスを入力するのですか?
迅速な回答ありがとうございます!
2015/03/02 13:54
grant all on dbname.* to username@localhost identified by 'password';
grant all on dbname.* to username@127.0.0.1 identified by 'password';
2015/03/02 21:33
ユーザーは作成できたのですがやはり接続ができません。
質問に状況を追記しましたのでもしよろしければお力添えください。
2015/03/02 21:56
> ユーザーは作成できたのですがやはり接続ができません。
繰返しになりますが、エラーメッセージを書いてください。
また最新のプログラムと、コマンドラインなどでMySQLにrootでログインし以下のSQLを実行し、その結果を貼り付けてください。
> SHOW GRANTS FOR "作成したユーザー名"
2015/03/03 02: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$
2015/03/03 10:19
> 2005: Unknown MySQL server host 'hiroki_%' (20)
サーバ自体につながっていないようですね。
MySQLが動いているサーバ名(ホスト名)は「'hiroki_%'」で間違いないですか?
2015/03/03 12:47
localhost:3307
だと思います。
2015/03/03 12:49
> localhost:3307
> だと思います。
そうだとしたら、以下のコードはご自身で正しいと思いますか?
> $connect = mysql_connect("hiroki_%","hiroki","");
2015/03/03 12:55
当てずっぽうで書くだけでは絶対にうまく動きません。それぞれに必ず意味があります。
http://php.net/manual/ja/function.mysql-connect.php
2015/03/03 21:24
$connect = mysql_connect("localhost:3307","hiroki","");
ですかね?
ごちゃしてきたので一旦整理して質問し直します。
2015/03/04 00:45
ドキュメントは見ましたか?
見ないで当てずっぽうで回答していませんか?当てずっぽうのままではこれ以上の成長はできませんよ。
また、ユーザー「hiroki」を作成する際にパスワードは設定されませんでしたか?
2015/03/04 01:54
passwordは設定しました!
入力し忘れていました。。
質問に答えていただいているうちに少しだけ理解してきて
ユーザー「root」にパスワードを設定し
phpMyadminの直下のconfig.inc.phpでパスワードを直接変更することにより
$connect = mysql_connect("localhost","root","password");
で接続することができました!
度々お返事いただき誠にありがとうございます。
また、私自身の成長を促すようなご指導の仕方感謝しております。
2015/03/04 11:05
たぶんパスワードを設定してそうなのに書かれてないなぁと思ったのと、なんで試してないんだろう?というところからの推測です。
まぁ何はともあれ、ひとまずつながったようでよかったです。
肝心のINSERTの方も大丈夫でしたか?
2015/03/04 19:23
パスワードを設定したことでそこもクリアできたみたいです。
2015/03/04 19:45
またこれに懲りず、質問してみてください。ではでは。