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

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

ただいまの
回答率

88.09%

エラーの解釈の仕方が分かりません。

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 300

score 15

前提・実現したいこと

下記のプログラム(一部抜粋)を実行結果、エラーが出たのですが予期しないトークンとは何なのか分かりません。

ご教授よろしくお願いいたします。

発生している問題・エラーメッセージ

Parse error: syntax error, unexpected token "}" in C:\xampp\htdocs\customer\c_inq.php on line 45

該当のソースコード

                <?php
                    $dsn = 'mysql:dbname=example;host=localhost';
                    $user = 'root';
                    $password = 'shapshap';
                        try{
                            $dbh = new PDO($dsn, $user, $password);
                            $sql = 'SELECT * FROM example';
                            $query = $dbh->query("$sql");
                                while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
                                    echo '<td>'.$row['C_nm'].'</td>';
                                    echo '<td>'.$row['C_nam'].'</td>';
                                    echo '<td>'.$row['C_phn'].'</td>';
                                    echo '<td>'.$row['C_add'].'</td>';
                                    '<form action="c_search_ans.php">
                                        <td>
                                            <button type="submit">修正</button>
                                        </td>
                                    </form>
                                    <form action="c_inq_era.php">
                                        <td>
                                            <button type="submit">削除</button>
                                        </td>
                                    </form>'
                                }
                        }
                            catch (PDOException $e){
                                print('Error:'.$e->getMessage());
                                die();
                            }
                            $dbh = null;
                ?>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

+5

while ($row = $query->fetch(PDO::FETCH_ASSOC)) の行で「{」忘れてる


一応、清書してみた。動くかどうかはしらん。
インデント量がデタラメだと、コードを追うのに疲れるだけなので、
インデント量含めて整形してくれるエディタを使うと便利よ。

<?php
    $dsn = 'mysql:dbname=example;host=localhost';
    $user = 'root';
    $password = 'shapshap';
    try{
        $dbh = new PDO($dsn, $user, $password);
        $sql = 'SELECT * FROM example';
        $query = $dbh->query("$sql");
        while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
            echo '<td>'.$row['C_nm'].'</td>';
            echo '<td>'.$row['C_nam'].'</td>';
            echo '<td>'.$row['C_phn'].'</td>';
            echo '<td>'.$row['C_add'].'</td>';
            echo '<form action="c_search_ans.php">
                <td>
                    <button type="submit">修正</button>
                </td>
            </form>
            <form action="c_inq_era.php">
                <td>
                    <button type="submit">削除</button>
                </td>
            </form>';
        }
    }
    catch (PDOException $e){
        print('Error:'.$e->getMessage());
        die();
    }
    $dbh = null;

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/03/03 10:22

    回答ありがとうございます。
    質問ですが、インデント量を整形してくれるエディタってあるんですか?

    キャンセル

  • 2021/03/03 10:25

    VScodeに拡張機能Intelephenseを組み込むなどすれば生産性が上がります。
    Visual Studio Code でPHPを開始するまでの手順 - Qiita https://qiita.com/tfukumori/items/97a8f1ac6532612b004f

    キャンセル

  • 2021/03/03 10:43

    大抵のエディタでインデントをどうつけるかの設定ってあるのでは。
    tab1つとかspace4つとかの設定。

    キャンセル

  • 2021/03/03 15:13

    ありがとうございます。
    試してみます。

    キャンセル

+3

  </form>'


の末尾にセミコロンが足りません。
この場合、unexpexted tokenとはphpの文法に沿ってない文字列が突如現れてるよ
くという感じのエラーで、大抵はその行より前の部分に文法ミスがあります。

追記
whileの後の{も抜けていますね


文法エラーを人力で探すのは大変なので、IDEや高機能なエディタの補助機能を使うのが楽です。
PHP VSCode 設定とか、(有料ですが)phpStormあたりで検索してみて開発環境を整えることをお勧めします。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+3

45行目の}あたりにエラーがあります。
直前のechoの文末のセミコロンが抜けてます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+2

予期しないトークンとは何なのか

そもそもこの場面における「トークン」の意味を理解するところからかと思います。様々な場面で使われるものなので。
Wikipediaの解説で私はしっくりきました。

プログラミング言語など(における広義の構文解析)で「トークン」と呼ばれるもの(「字句」の記事や字句解析#トークンを参照)は、ソースコード中の文字の並び中の、1個ないし複数個の文字から成る文字列で、キーワードや識別子や演算子やリテラルとして意味を成す最小単位となっているもの、である。

リンクになってる「字句解析」も参照してください。


今回の場合、PHPの構文解析において、構文に反する文字列が現れたという意味で「予期しない」と綴られているということになります。

Parse error: syntax error,

は「構文解析上のエラー」ということを教えてくれています。

例えば、( ではじまればいずれ ) が来るはずなのに来ないまま別の(や{が来てしまったとか、そういうことですね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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