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

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

ただいまの
回答率

88.22%

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

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,734

YamamotoHiroki

score 78

mysqlでデータベースを扱おうと試行錯誤しているのですがなかなかうまくいきません。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/04 11:05

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

    まぁ何はともあれ、ひとまずつながったようでよかったです。
    肝心のINSERTの方も大丈夫でしたか?

    キャンセル

  • 2015/03/04 19:23

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

    キャンセル

  • 2015/03/04 19:45

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

    キャンセル

+1

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

$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);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/02 12:59

    ユーザー名をrootにして実行するとエラーが出ます
    $connect = mysql_connect("localhost","root","");
    echo mysql_errno().": ".mysql_error()."<BR>";

    とするとエラーメッセージはこうです。

    1045: Access denied for user 'root'@'localhost' (using password: NO)

    また、レンタルサーバーは使用していません。
    ローカル開発環境です。

    キャンセル

+1

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/02 12:55

    >MySQLへアクセスできるユーザは作成していますでしょうか?

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

    キャンセル

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

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る