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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

952閲覧

phpのバージョンが5.3.3のときでも,次のコードのエラーを修正する方法

zzz08759310

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/12/24 14:55

編集2021/12/25 03:13

mysql内にあるデータベースのテーブルを連携させたphpプログラムを作成しました.
ブラウザ上でこのプログラムを起動させると,複数の入力欄が表示されて,入力した情報 (あらかじめテーブルに登録しているカラムの情報)の組み合わせによって, 出力結果
(これもあらかじめテーブルに登録している情報)が変わるようにするプログラムを作ってみました.
知恵袋を使って,ある程度はコードの改良が進んだのですがphpのバージョンが古いのかエラーが
発生しています.
エラー内容
syntax error, unexpected T_CATCH
#ソースコード

<?php $db_ipaddress ='IPアドレス名'; $db_id ='ユーザー名'; $db_pass ='パスワード'; $baba = filter_input(INPUT_POST, 'baba'); $kyori1 = filter_input(INPUT_POST, 'kyori1'); $kyori2 = filter_input(INPUT_POST, 'kyori2'); $kyaku1 = filter_input(INPUT_POST, 'kyaku1'); $kyaku2 = filter_input(INPUT_POST, 'kyaku2'); $ikusei = filter_input(INPUT_POST, 'ikusei'); $message = array(); $link = mysqli_connect($db_ipaddress, $db_id, $db_pass); if ( ! $link ) { die('接続失敗'.mysql_error() ); } else { print "mysql 接続完了<br>"; } $usedatabase ='db名'; $db_selected = mysqli_select_db($link,$usedatabase); if ( ! $db_selected ) { die('データベース選択失敗'.mysql_error() ); } else { print "データベース選択完了<br>"; } mysqli_set_charset($link,'utf-8'); $sql = 'select * from uma_musume'; $result = mysqli_query($link,$sql); if ( ! $result ) { die('selectクエリーが失敗'.mysql_error() ); } else { print "sql文が無事に稼働<br>"; print"データ取得完了<br>"; } try { $dbh = new PDO('mysql:db_host=ホスト名;usedatabase=db名', $db_id, $db_pass); $sth = $dbh->query('select * from テーブル名 where baba=? and kyori1=? and kyori2=? and kyaku1=? and kyaku2=? and ikusei=?'); $sth->execute(array($baba, $kyori1, $kyori2, $kyaku1, $kyaku2, $ikusei)); foreach ($stmt as $row) { $message = htmlspecialchars($row['ウマ娘名'], ENT_QUOTES); print_r($row); } echo "</pre>"; $sth = null; $dbh = null; } catch (PDOException $e) { //ここからエラー $message = '<p>DATABASE ERROR</p>'; $message = $e->getMessage(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> 検索フォーム<br> <body> <form action ="data_final-1.5.php" method="post"> バ場適性 <input type="text" name="baba" value="<?= $baba ?>"><br> 距離適性_01 <input type="text" name="kyori1" value="<?= $kyori1 ?>"> 距離適\ 性_02 <input type="text" name="kyori2" value="<?= $kyori2 ?>"><br> 脚質_01 <input type="text" name="kyaku1" value="<?= $kyaku1 ?>"> 脚質_02 <i\ nput type="text" name="kyaku2" value="<?= $kyaku2 ?>"><br>

育成難易度 <input type="text" name="ikusei" value="<?= $ikusei ?>"><br>
<button>検索</button>

</form> <?= count($message) > 0 ? 'あなたが選んだのは ' . implode(', ', $message) . '\ です' : '該当する名前が見つかりません' ?> </body> </html> #補足

このコードは私自身が作ったのではなく,知恵袋の方の回答で学んだことを活かして
元々作ったコードと合わせて改良したものです.

そしてエラーが出たコードは
catch (PDOException $e) {
からです.

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/25 02:14 編集

5.3 なんてまともに使うのがかなりしんどいバージョンです。 *よほど php に精通していないと使えません。 外部に公開するものであれば、まずバージョンを上げることを考えてください。
zzz08759310

2021/12/25 02:35

バージョンが低すぎるということは理解しています.しかしphpの実行環境は 大学専用の環境サーバーに入って行うものらしいので,管理者でない生徒である私にはバージョンアップは難しいです. macのターミナルからphpが実行できる環境に設定することは可能でしょうか?
m.ts10806

2021/12/25 02:44

IT企業の社外研修でもない話ではないですね。Javaの研修でJava6採用してるとか課題と割り切ってやるなら赤の他人を頼るのは悪手です。業務では絶対使わないですし。
zzz08759310

2021/12/25 02:51

悪手とか言ってますけど,わかんないからこうやって聞いてるんじゃないですか.回答者さんはただアドバイスするだけで良いんですよ.課題は自分の力でやれというのはお門違いじゃないですか?
m.ts10806

2021/12/25 03:36

>回答者さんはただアドバイスするだけで良いんですよ それは単なる横暴です。「質問するときのヒント」や「推奨していない質問」が整理されているように、サービス利用のために求められることは質問者のほうが多いです。幾度となく質問編集するように依頼していますが、それは質問内容に不備があったりコードそのままで提示されていたりして、見る人への配慮が足りていない(技術関係ない)ということです。 >課題は自分の力でやれというのはお門違いじゃないですか? 課題は赤の他人より先に聞くべき場所があるという話です。 事情や背景も知らない赤の他人が、課題にそった対応をできるはずがないですよね。バージョンが古いのなんて最たる例です。 そもそも課題ってこれまで習ってきたことで出来ることのはずなので、基本「自分の力でできないとおかしいもの」ですよ。
zzz08759310

2021/12/25 04:54

バージョンが古いのは仕方ないことです.だって学校が管理している環境のサーバーなんでどうしようもないんですよ.ならばと自分のターミナルで新たにディレクトリを作ってphpファイルが書き込むところまでは持ってきたのに, いざ実行するとエラーどころか実行すらままならず.homebrewのインストーリもphpのバージョンが7以上なのも確認できているのに % brew search php@7 ==> Formulae php@7.2 php@7.3 php@7.4 ✔ php % php -v zsh: command not found: php となってしまいます. せめてターミナルから自分が作ったディレクトリの中でphpや他のプログラムが動かせるようになれば,なんとかなりそうな気がするんですが.どうでしょう?
zzz08759310

2021/12/25 04:55

まず$ではなく%となっている時点でおかしいのでしょうか?
guest

回答2

0

インデントを付けてソースを眺めると判りやすいですが、tryの閉じカッコがありませんよね。

php

1try { 2 $dbh = new PDO('mysql:db_host=ホスト名;usedatabase=db名', $db_id, $db_pass); 3 $sth = $dbh->query('select * from テーブル名 where baba=? and kyori1=? and kyori2=? and kyaku1=? and kyaku2=? and ikusei=?'); 4 $sth->execute(array($baba, $kyori1, $kyori2, $kyaku1, $kyaku2, $ikusei)); 5 foreach ($stmt as $row) { 6 $message = htmlspecialchars($row['ウマ娘名'], ENT_QUOTES); 7 print_r($row); 8 } 9 echo "</pre>"; 10 $sth = null; 11 $dbh = null; 12 13catch (PDOException $e) { //ここからエラー 14 $message = '<p>DATABASE ERROR</p>'; 15 $message = $e->getMessage(); 16 17}

投稿2021/12/24 15:10

KoichiSugiyama

総合スコア3041

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

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

zzz08759310

2021/12/24 15:21

ご回答ありがとうございます.私はプログラムを習ってまだ日が浅いですが,そちらの仰っていることは $message = $e->getMessage(); } の後に }を付け加えるということでしょうか?
hoshi-takanori

2021/12/24 17:16

質問者さんへ catch の前に } が必要です。
m.ts10806

2021/12/24 20:12

場所云々より「構文として成り立っている形」を確実にしてください。
zzz08759310

2021/12/25 01:09

わかりました.構文の構成に気をつけながら修正したら,このようなコードに修正しました. if ( ! $result ) { die('selectクエリーが失敗'.mysql_error() ); } else { print "sql文が無事に稼働<br>"; print"データ取得完了<br>"; } try { $dbh = new PDO('mysql:db_host=n20-jora;usedatabase=uma', $db_id, $db_pass); $sth = $dbh->query('select * from uma_musume where baba=? and kyori1=? and kyori2=? and kyaku1=? and kyaku2=? and ikusei=?'); $sth->execute(array($baba, $kyori1, $kyori2, $kyaku1, $kyaku2, $ikusei)); foreach ($stmt as $row) { $message = htmlspecialchars($row['ウマ娘名'], ENT_QUOTES); print_r($row); } echo "</pre>"; $sth = null; $dbh = null; } catch (PDOException $e) { $message = '<p>DATABASE ERROR</p>'; $message = $e->getMessage(); } else文の追加や,db_hostも消すなどしてみましたが, このような警告文がまた発生しました. . mysql 接続完了<br>データベース選択完了<br>PHP Warning: mysqli_set_charset() expects exactly 2 parameters, 1 given in   on line 32 PHP Warning: mysqli_query() expects at least 2 parameters, 1 given in   on line 34
zzz08759310

2021/12/25 01:11

32行目は mysqli_set_charset('utf-8'); 34行目は $result = mysqli_query('select * from uma_musume'); であり,これは宣言する場所が違うのではないかと私は捉えています.
zzz08759310

2021/12/25 01:13

すいません.私の予想間違えました.回答者さんアドバイスお待ちしています.
m.ts10806

2021/12/25 01:22

質問編集できるので私のマークダウンの指摘も併せて本文調整してもらえたらと。
m.ts10806

2021/12/25 01:43

>else文の追加や,db_hostも消すなどしてみましたが, それは「なんとなくやってみた」ことであって「構文として成り立っていることを確実にする」ための行動ではないです。 構文とはPHPマニュアルにある機能説明をきちんと確認して1つ1つ確かめるものであって、「あーでもないこーでもない」をザッピングのようにやることではないです。 新たなエラーもエラーを読んでPHPマニュアル確認すれば、どうして出たエラーなのか、何をすれば良いのか分かる内容です。
zzz08759310

2021/12/25 02:10

エラーのPHP Warning: mysqli_query() expects at least 2 parameters, というのは調べたところ, mysqli_set_charset($link,'utf-8'); $sql = 'select * from uma_musume'; $result = mysqli_query($link,$sql); このように修正しました. そしたらこの結果になったのでうまくいったということですか? 実際にブラウザで見れるのは,学校内のサーバー環境でしかみれないみたいなので. mysql 接続完了<br>データベース選択完了<br>sql文が無事に稼働<br>データ取得完了<br> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> 検索フォーム<br> <body> <form action ="data_final-1.5.php" method="post"> バ場適性 <input type="text" name="baba" value="<?= $baba ?>"><br> 距離適性_01 <input type="text" name="kyori1" value="<?= $kyori1 ?>"> 距離適\ 性_02 <input type="text" name="kyori2" value="<?= $kyori2 ?>"><br> 脚質_01 <input type="text" name="kyaku1" value="<?= $kyaku1 ?>"> 脚質_02 <i\ nput type="text" name="kyaku2" value="<?= $kyaku2 ?>"><br> 育成難易度 <input type="text" name="ikusei" value="<?= $ikusei ?>"><br> <button>検索</button> </form> <?= count($message) > 0 ? 'あなたが選んだのは ' . implode(', ', $message) . '\ です' : '該当する名前が見つかりません' ?> </body> </html> ちなみにこのプログラムは複数の入力要素の入力結果によって,出力結果の内容やその数が変わるといったものです.
m.ts10806

2021/12/25 02:36

何度か依頼してますが、質問本文編集してもらえますか
guest

0

PDOとmysqliは混ぜて使えないので統一してください。
可能ならPDOのほうで。
こういう記事を参考に。
※バージョン古いと互換性ないかもしれませんが、PHPマニュアル等確認して自身で調整してください
ネットの記事だけを参考に切り貼りだけはNG

投稿2021/12/25 02:47

m.ts10806

総合スコア80854

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

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

zzz08759310

2021/12/25 03:28

付け焼き刃の知識でまだまだ至らないことだらけですが,dsnというのは linkのことでしょうか? そうであった場合,言語設定mysqli_set_charset($link,'utf-8'); は消して,dsnに言語設定の定義を書き加えれば良いでしょうか?
m.ts10806

2021/12/25 03:37

>付け焼き刃の知識でまだまだ至らないことだらけですが それが建前でなく本心なら、ここで付け焼刃のアドバイスをもらうより基礎をしっかりおさえたほうが明らかに理解が進みます。
zzz08759310

2021/12/25 03:52

すいません.時間がないんです.私もあれこれ調べましたが,その基礎を抑えるより,まずは実行が成功できるところまで持っていきたいです. あなたの言う通り,基礎を抑えてからが一番なのはよくわかってます. こちらも投げやりでやっていません.アドバイスをもらったらその通りに修正し,うまくいかないのであれば自分なりに修正をやっています.
zzz08759310

2021/12/25 03:57

それとpdoとmysqliの併用が不可能ということについてですが,それは linkやdb_selectedとかを消して,その代わりとなるコードをpdoに合わせて 新たに書き込むということでしょうか?
m.ts10806

2021/12/25 03:59

申し訳ないですが、時間がないとか赤の他人には全く関係ないです。 丸投げ感が増すだけです。 急いだところでプログラムは書いた通りにしか動かないので、「動くように必要な手続きを踏んで書く」以外にありません。 付け焼刃、手あたり次第 をやっていたほうが時間かかりますよ。現に今そうなってますから。
m.ts10806

2021/12/25 04:08 編集

PHP5.3という、回答者の手元で再現するのが困難な環境である時点で、他者には「ただ面倒なだけの問題」にしかうつってませんしね。 「こういうの参考にやってみてよ」レベルのアドバイスしかできないんですよ。 答えだけ求めても動くようにはならないので、自身で「必要となる手続き」を見極めて試行するしかないです。エラーはちゃんと読んでPHPマニュアルで機能確認をする(必要な引数、何が返却値となるのか、関連機能)。 現状で他人に言えるのはここまで。ペアプロ出来るわけでもないので、アドバイスされたこと・すすめられた記事を理解するしかありません。 理解できないなら理解できるよう基礎を勉強する。そのほうが圧倒的に早く出来上がります。面倒だと思って後回しにする人にありがちな悪循環に入っています。
zzz08759310

2021/12/25 04:10

確かにプログラムは論理的思考が一番に必要ですよね.本来なら時間をかけてじっくりといきたいところなんですが. わからないから修正方法を教えてくださいとここに書き込んでますが,私も丸投げにしていません. 気づいたら修正を自分なりに施しています.その結果として mysql 接続完了<br>データベース選択完了<br>sql文が無事に稼働<br>データ取得完了<br> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> 検索フォーム<br> <body> <form action ="data_final-1.5.php" method="post"> バ場適性 <input type="text" name="baba" value="<?= $baba ?>"><br> 距離適性_01 <input type="text" name="kyori1" value="<?= $kyori1 ?>"> 距離適\ 性_02 <input type="text" name="kyori2" value="<?= $kyori2 ?>"><br> 脚質_01 <input type="text" name="kyaku1" value="<?= $kyaku1 ?>"> 脚質_02 <i\ nput type="text" name="kyaku2" value="<?= $kyaku2 ?>"><br> 育成難易度 <input type="text" name="ikusei" value="<?= $ikusei ?>"><br> <button>検索</button> </form> <?= count($message) > 0 ? 'あなたが選んだのは ' . implode(', ', $message) . '\ です' : '該当する名前が見つかりません' ?> と返ってきましたが,ここまできた場合mysqlには接続できて,その中のテーブルの連携もできていて,あとはブラウザで閲覧したときに思い通りの結果になっているか試せるところまできたということになっているでしょうか? pdoとmysqliが併用ができないと仰っていましたが,なんか成功している?っぽいです.
m.ts10806

2021/12/25 04:15

コメントにコード書かれても読みづらいだけなので、質問本文にマークダウンで提示してください。 https://teratail.com/questions/238564 >pdoとmysqliが併用ができないと仰っていましたが,なんか成功している?っぽいです. それぞれ接続して別のインスタンスになってるだけの話です(片方無駄なリソースになっている)。 たまにpdoで接続してmysqliの機能を使おうとしている人がいるので、「併用が不可能」ではなく、「全く別の機能でインスタンスを他方に利用できない」というのが正しい表現です。全く互換性のない別の機能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問