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

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

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

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

PHP

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

Q&A

5回答

828閲覧

PHPでmysqlを使っているコードの意味が知りたい

issey1110

総合スコア10

MySQL

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

PHP

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

0グッド

0クリップ

投稿2019/01/31 03:08

前提・実現したいこと

コードの意味が知りたいです。
ここに質問の内容を詳しく書いてください。
PHPでデータベースをmysqlで扱うプログラムをネットから拾ってきて、1行ずつ理解していっているのですが、調べてもわからない部分がありました。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

コードの意味がわからない

PHP

1try { 2 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 3arrayがここにある意味がわかりません。 4 5$stmt->execute(array($username, password_hash($password, PASSWORD_DEFAULT))); 6これもなぜここにarrayがあるのかわかりません。 7 8### 試したこと 9 10ネットで調べました。 11 12### 補足情報(FW/ツールのバージョンなど) 13 14ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2019/01/31 03:09

「ネットで調べた」だけだと何を見たのかわかりません。見ただけではなくどう理解したのか(してないのか)を記載してください。 基本的にはphpマニュアル熟読すれば済む話ではありますが
退会済みユーザー

退会済みユーザー

2019/01/31 03:14

質問テンプレートの、使ってない箇所を省いて読みやすくしてほしいものです。読んでもらって回答を得たいという気持ちが強いなら、回答する側の気持ちも察してほしいです。
guest

回答5

0

おそらく、PHP 5.3以下の古いコードだからではないかと思います。

PHP 5.4以上では、配列リテラルを[ ... ]で書けますが、PHP 5.3以下では関数のようにも見えるarray( ... )を使うしかありませんでした。

投稿2019/01/31 03:17

編集2019/01/31 03:18
maisumakun

総合スコア145184

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

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

yambejp

2019/01/31 03:19

ああ、なるほど []ではなくなぜarray()なの?っていう解釈もできますね
maisumakun

2019/01/31 03:20

今どきのコードにarray()が出てくることはほぼないので、そっちの意味で理解できないのではないかと推測しました。
m.ts10806

2019/01/31 03:59

PHP7だという質問にはよく出てきますけどね・・・
issey1110

2019/01/31 12:07

そこには気づいていませんでした( ; ; )
guest

0

配列が与えられることを期待して用意された引数だから、と言うのは他の方がおっしゃっているので割愛して。

PHPは、関数(メソッド)の実行前に引数で与えられたモノが実行されます。
なので、値が格納された後の変数をそのまま与えるのは当然ですが、提示頂いたようにその場で配列を構築して渡すこともできます。
極端な例だと、以下のように式を展開させたり、その場でクラスをインスタンス化したり、無名関数を定義したりしても問題なく動作します。

PHP

1<?php 2function test($a, $b, $c, $d) { 3 return $a.'-'.$b.'-'.$c->ret().'-'.$d(); 4} 5 6class Test { 7 public function ret() { 8 return 'a'; 9 } 10} 11 12$e = 'This'; 13 14$test = test($e,(1 > 0) ? 'is' : 'was', new Test(), function () { 15 return 'pen'; 16 }); 17 18echo $test;

投稿2019/01/31 04:18

kunai

総合スコア5405

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

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

0

new PDOのところのarrayは、接続時のオプション指定だね。
PHP: PDO::__construct - Manual
array $options
だから、array型で与えているわけで。
オプションで与えるフラグが一つでもarray型でないといけない。

execute()のところのarrayも、クエリー実行時入力パラメータがarray型が要求されるから。
PHP: PDOStatement::execute - Manual
array $input_parameters
だから、array型で与えているわけで。
prepare()して、bindValue()しまくってから、execute()する方法もあるけど、
bindValue()しまくらずにPrepare()ののちexecute()するときのパラメータの与え方が
array $input_parameters を指定することだったりする。
prepare()するところでSQL文の途中に「?」が書いてあって、
execute()で与えるarray()によって「?」出現順に合わせてパラメータが適用される形。

投稿2019/01/31 03:20

編集2019/01/31 03:24
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

issey1110

2019/01/31 12:06

わかりやすい回答ありがとうございます。 マニュアルを見ていなかったのでこれからは見たいと思います。 追加でお聞きしたいのですが、new PDOの分は、オプションでATTR_ERRMODEをERRMODE_EXCEPTIONにしていると言うことでしょうか。
guest

0

マニュアルに書いてありますよ

「new PDO」の4番めのarrayは$optionsつまり様々なオプションを設定する
ところなので、複数書けるように配列になっています

$stmt->execute()内の配列はprepare処理をするときに複数値を渡せるような仕組みです

投稿2019/01/31 03:13

yambejp

総合スコア114839

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

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

0

その手前にprepareがあって、そこに?を含むSQLが書かれているはず。その?のところを入力パラメータとして指定している。

投稿2019/01/31 03:10

papinianus

総合スコア12705

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

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

papinianus

2019/01/31 03:15

ごめんなさい。executeのとこしかみてなかった。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問