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

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

ただいまの
回答率

90.53%

  • PHP

    20282questions

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

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,547

marimokomokmOk

score 46

PHPのMySQLについてエラーがでてしまいました。
192.168.1.30で実行すると
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'staff'@'localhost' (using password: YES)' in /home/user/public_html/honorific_input.php:78 Stack trace: #0 /home/user/public_html/honorific_input.php(78): PDO->__construct('mysql:host=loca...', 'staff', 'password') #1 {main} thrown in /home/user/public_html/honorific_input.php on line 78
というエラーがでてしまいます。

http://localhost/kisoform_/honorific_input.phpで実行すると、エラーは表示されません。

エラーがでてしまうのが嫌です。なぜでしょうか。

<?php
var_dump($_POST);
// var_dump($_POST['keyword']);
var_dump($_REQUEST);

// if($_POST) {
// $keyword = $_POST['keyword'];
// }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xm1ns="http://www.w3.org/1999/xhtml">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript">


<title>敬語学習ノート</title>
<style type="text/css">
.font1 {
    font-family: "あずきフォント", serif;
}

.font2 {
    font-family: "あずきフォント", serif;
    font-size:160%;
    color:"#e4b9f9";
}
.body{
    cursor:url(hosi5.ani);
}
html,body {
 scrollbar-base-color:#c3d7e0;
 scrollbar-track-color:#c3d7e0;
 scrollbar-face-color:#c3d7e0;
 scrollbar-shadow-color:#c3d7e0;
 scrollbar-darkshadow-color:#c3d7e0;
 scrollbar-highlight-color:#c3d7e0;
 scrollbar-3dlight-color:#c3d7e0;
 scrollbar-arrow-color:#ffffff;
 filter:chroma(color=#c3d7e0);
 }
</style>
</head>
<body>
<table cellspacing="0" cellpadding="4" style="border:5px black solid;"><tr><td style="border:5px brown inset;color:white;" bgcolor="green">
<p class="font1">検索したい文字を入力してください</p>
<form action="" method="post">
<input type="text" name="keyword">
<input type="submit" value="検索">
</form>
</p>

</td></tr></table>

<!-- <p class="font1">検索したい文字を入力してください</p> -->
<!-- <form action="" method="post"> -->
<!-- <input type="text" name="keyword"> -->
<!-- <input type="submit" value="検索"> -->
<!-- </form> -->
<!-- </p> -->
<!-- <img src="敬語学習ノートロゴ.png"></img> -->
    <table border="1" width="80%">
        <caption class="font2" >敬語学習ノート</caption>
</br>
</p>

        </br>
        <tr style="background: #ccccff">
            <th class="font1">番号</th>
            <th class="font1">タメ語</th>
            <th class="font1">正しい敬語</th>
            <th class="font1">例文</th>
        </tr>
<?php

$pdo = new PDO ( 'mysql:host=localhost;dbname=honorific;charset=utf8', 'staff', 'password' );

if($_POST){
$vKeyword = isset($_POST['keyword']) ? $_POST['keyword']:'';

$sql = $pdo->prepare ( 'select * from honorifics where wrongHonorific like ? or rightHonorific like ? or example like ?' );
$sql->execute (array ('%'.$vKeyword.'%','%'.$vKeyword.'%','%'.$vKeyword.'%'));
function h($str) {
    return htmlspecialchars ( $str );
}
foreach ( $sql->fetchAll() as $row ) {
    echo '<tr>';
    echo '<td>' . h ( $row ['id'] ), '</td>';
    echo '<td>', h ( $row ['wrongHonorific'] ), '</td>';
    echo '<td>', h ( $row ['rightHonorific'] ), '</td>';
    echo '<td>', h ( $row ['example'] ), '</td>';
    echo '</tr>';
    echo "\n";
}
}else if(empty($_POST['keyword'])){
function h($str) {
    return htmlspecialchars ( $str );
}
foreach ( $pdo->query('select * from honorifics') as $row ) {
    echo '<tr>';
    echo '<td>' . h ( $row ['id'] ), '</td>';
    echo '<td>', h ( $row ['wrongHonorific'] ), '</td>';
    echo '<td>', h ( $row ['rightHonorific'] ), '</td>';
    echo '<td>', h ( $row ['example'] ), '</td>';
    echo '</tr>';
    echo "\n";
}
}
?>
</table>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+1

ユーザー:staffに対して適正なHostも含めたユーザー登録をしてください
mysqlデータベースのuserテーブルに記載されています
ユーザー追加もしくは既存ユーザーの属性変更後flush privileges
するのもお忘れなく

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/07 11:06

    適正なhost?
    よくわかりません、調べてみます。
    ご解答下さりありがとうございます。

    キャンセル

  • 2017/02/07 11:12

    mysqlのユーザー権限はhostとuserの組み合わせで決まります。
    mysql運用の基本ですので調べておいて損はないと思います

    キャンセル

  • 2017/02/07 11:41

    mysql> select host, user from mysql.user;
    +-----------+----------+
    | host | user |
    +-----------+----------+
    | linux | |
    | linux | root |
    | localhost | |
    | localhost | pma |
    | localhost | root |
    | localhost | staff |
    | localhost | testuser |
    +-----------+----------+
    7 rows in set (0.03 sec)

    キャンセル

  • 2017/02/07 11:56

    http://192.168.1.30/のHostってことでしょうか。
    どのようなHostかわかりません。

    キャンセル

  • 2017/02/07 12:01

    セキュリティをそれほど気にしなくていい環境でしたら
    hostを「%」、user「staff」でユーザーを追加するとよいでしょう

    キャンセル

  • 2017/02/07 12:12

    $pdo = new PDO ( 'mysql:host=%;dbname=honorific;charset=utf8', 'staff', 'password' );こちらに変えました。

    mysql> grant all on honorific.* to 'staff'@'%' identified by 'password';
    Query OK, 0 rows affected (0.00 sec)

    mysql> select host,user from mysql.user;
    +--------------+----------+
    | host | user |
    +--------------+----------+
    | % | staff |
    | 192.168.1.30 | staff1 |
    | linux | |
    | linux | root |
    | localhost | |
    | localhost | pma |
    | localhost | root |
    | localhost | staff |
    | localhost | testuser |
    +--------------+----------+
    9 rows in set (0.00 sec)

    まだエラーです。。

    キャンセル

  • 2017/02/07 13:04

    hostを%にするということは、どのhostからでも接続できるようにという意味でしょうか。

    キャンセル

  • 2017/02/07 13:10

    mysql側のユーザー登録の問題なのでmysqlデータベースの
    userテーブルを修正しないと意味がありません。
    new PDOするときもあくまでもhostはlocalhostなどになるでしょう。

    >hostを%にするということ、どのhostからでも接続できる
    そうですね。アクセス元のホストを限定しないという意味です

    キャンセル

  • 2017/02/07 13:20

    どうすればいいでしょうか。
    解決しません。

    キャンセル

  • 2017/02/07 13:40

    >hostを「%」、user「staff」でユーザーを追加するとよいでしょう
    mysql> grant all on honorific.* to 'staff'@'%' identified by 'password';
    これをmysqlで実行は合っていますか。

    キャンセル

  • 2017/02/07 14:07

    こうじゃないですか?

    CREATE USER 'staff'@'%' IDENTIFIED BY 'mypasswd';
    その後、「flush privileges 」をしておきます

    キャンセル

  • 2017/02/07 15:34

    ありがとうございます。
    mysql> create user 'staff'@'%' identified by 'password';
    Query OK, 0 rows affected (0.00 sec)

    mysql> select host,user from mysql.user;
    +--------------+----------+
    | host | user |
    +--------------+----------+
    | % | staff |
    | 192.168.1.30 | staff1 |
    | linux | |
    | linux | root |
    | localhost | |
    | localhost | pma |
    | localhost | root |
    | localhost | staff |
    | localhost | testuser |
    +--------------+----------+
    9 rows in set (0.00 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.02 sec)

    キャンセル

  • 2017/02/07 15:36

    これをしたあと、
    PHPを$pdo = new PDO ( 'mysql:host=%;dbname=honorific;charset=utf8', 'staff', 'password' );に変更しました。
    合ってますでしょうか。

    キャンセル

  • 2017/02/07 15:39

    エラーです
    Warning: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/user/public_html/honorific_input.php on line 74 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known' in /home/user/public_html/honorific_input.php:74 Stack trace: #0 /home/user/public_html/honorific_input.php(74): PDO->__construct('mysql:host=%;db...', 'staff', 'password') #1 {main} thrown in /home/user/public_html/honorific_input.php on line 74

    キャンセル

  • 2017/02/07 15:50

    new PDO のhostはlocalhostって書きましたよね?

    キャンセル

  • 2017/02/07 16:03

    $pdo = new PDO ( 'mysql:host=localhost;dbname=honorific;charset=utf8', 'staff', 'password' );に直しました。
    エラーがでてしまいました(泣)
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'staff'@'localhost' (using password: YES)' in /home/user/public_html/honorific_input.php:74 Stack trace: #0 /home/user/public_html/honorific_input.php(74): PDO->__construct('mysql:host=loca...', 'staff', 'password') #1 {main} thrown in /home/user/public_html/honorific_input.php on line 74

    キャンセル

  • 2017/02/09 12:45

    新たに会社のサーバーのMySQLにDB作らないといけないんですね!><

    キャンセル

check解決した方法

0

新たに会社のサーバーのMySQLにDB作らないといけないんですね!><

honorific_input.phpの記述が同じだと仮定すると、
http://10.168.1.30/~(会社のLAN内のサーバ)にアクセスしたときには(会社のサーバのphpスクリプトから)会社のサーバのMySQLにアクセスします。この場合「localhost」はxamppのMySQLではありません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • PHP

    20282questions

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