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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

Q&A

解決済

2回答

3710閲覧

どこが間違っていますか?ユーザー定義関数

b1ackc0ffee

総合スコア267

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

0グッド

0クリップ

投稿2015/07/07 09:17

ユーザー定義関数を宣言しているのですが、下記のようなエラーメッセージ表示されました。

Parse error: syntax error, unexpected ']', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\bbs\function.php on line 47

どこが間違っていますか?
なおこのようなエラー内容の意味一覧が載っているサイトがあれば教えてください。
ソースは下記です。

lang

1<?php 2// 4つの関数を定義するよ 3/** 4 * @param $name 名前 5 * @param $body 本文 6 * @param $delkey 削除キー 7 */ 8function writeData($name, $body, $delkey) 9{ 10 try { 11 $pdo = new PDO('mysql:host=localhost;dbname=keiziban;charset=utf8', 'hogehoge', 'pass', array(PDO::ATTR_EMULATE_PREPARES => false)); 12 } catch (PDOException $e) { 13 die($e->getMessage()); 14 } 15 16 $sql = <<<MYSQL 17 INSERT INTO bbs (`name`, `body`,`delkey`, `datetime`) VALUES (?, ?, ?, NOW()) 18 MYSQL; 19 $o = $pdo->prepare($sql); 20 $o->execute(array($name, $body, $delkey)); 21 //var_dump($o->execute(array($name, $body, $delkey))); 22 //var_dump($o->errorInfo(), $o->errorCode()); 23} 24 25/** 26 * @return 読み出したデータ 27 */ 28function readData() 29{ 30 try { 31 $pdo = new PDO('mysql:host=localhost;dbname=keiziban;charset=utf8', 'hogehoge', 'pass', array(PDO::ATTR_EMULATE_PREPARES => false)); 32 } catch (PDOException $e) { 33 die($e->getMessage()); 34 } 35 36 $query = $pdo->query(<<<MYSQL 37 SELECT 38 * 39 FROM 40 bbs 41 ORDER BY id DESC 42 MYSQL 43 ); 44 45 $data = array(); 46 while ($row = $query->fetch(PDO::FETCH_ASSOC)) { 47 $data[] = $row; 48 } 49 return $data; 50} 51/** 52 * @param $data 53 * @return データを埋め込んだHTML文字列 54 */ 55function showData($data) 56{ 57 if (empty($data) || !is_array($data)) { 58 return ''; 59 } 60 61 $str = ''; 62 foreach ($data as $d) { 63 $id = intval($d['id']); 64 $name = $d['name']; 65 $body = $d['body']; 66 $str .= <<<HTML 67<div style="font-size:0.9em;"> 68 <div>名前:{$name}</div> 69 <div>{$body}</div> 70</div> 71 72HTML; 73 } 74 75 return $str; 76} 77?> 78

以上です。
宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

スマホで見てるので行数を数えられないですが、ざっと見たところ、ヒアドキュメントの書き方がおかしいと思います。

MYSQL;やHTML;の部分にはスペースもインデントも入れてはいけません。
http://php.net/manual/ja/language.types.string.php

エラーの内容は英語を訳した以上の情報を知ることは難しいです。

投稿2015/07/07 09:45

編集2015/07/07 14:34
hintrarou

総合スコア162

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

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

hintrarou

2015/07/07 14:41

あと、自分の投稿したソースコードをみてください。 $sql = <<<MYSQL 以降真っ赤ですよね。これで、エディタにもよりますが、テキスト部分がちゃんと閉じられていないことがわかります。 エディタは何を使ってますか?言語に合わせていろいろありますが、PHPはNetbeansのPHP版がオススメです。 https://netbeans.org/features/php/index_ja.html 文法エラーをちゃんと指摘してくれます。
b1ackc0ffee

2015/07/08 02:49

スマホから有難うございます。 ヒアドキュメントに関しては注意しておきます。 確かに真っ赤ですね。ど素人ですみません、、、。 エディタはATOMを使っています! 文法エラーをしてくれるエディタがないかずっと探していたので嬉しいです。 有難うございました★
guest

0

ヒアドキュメントの終端IDはインデントができません。(参考)
最後のHTML;のように、ソースの左端に記述する必要があります。

また、readData()関数内の終端IDはセミコロンが抜け落ちてしまっています。

投稿2015/07/07 09:44

suitedJK

総合スコア13

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

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

b1ackc0ffee

2015/07/08 02:46

有難うございます! そうなんですね!! 覚えておきます。 セミコロンがどこのことかわかりませんでした><、 インデントを消したら正常に動きました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問