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

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スクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2352閲覧

【php】データベース接続プログラム(PDO)の書き方について(半角スペースの有無)

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

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

PHP

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

0グッド

0クリップ

投稿2019/04/30 00:06

phpでPDOを使用してデータベースに接続する下記のようなプログラムがあるとします。

$dsn='mysql:dbname=userlist;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh =new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

このプログラムの1行目のシングルクォーテーション内に半角スペースを入れてはいけないのはなぜですか?

$dsn='mysql:dbname=userlist;host=localhost;charset=utf8';

入門書を読んでいたら、「半角スペースを入れてはいけない」とだけ書かれていてその理由はありませんでした。
ためしに半角スペースを入れても正常どおり実行されます。

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

maisumakunさんの回答にあるQiitaの記事のような挙動になることについて、興味があったので簡単に調べてみました。

C言語は得意では無いので雰囲気で読んだ感じ(本当に雰囲気でしか読めないので…)ですが、
ext/pdo/pdo.c#L191-L289
ext/pdo_mysql/mysql_driver.c#L548-L553
予めMySQL用のドライバーに定義されている、
charset, dbname, host, port, unix_socketというDSN用のキーと値をparseする際に、
意識してスペースを除去するというようなコードは含まれていないように見えました。

先のQiitaの記事によると、dbname =というようなdbnameのキー側にスペースを入れたときのみ正常に動作しないというように書いていますが、parseしているコードを見た感じ、DNS内にそれぞれの値を書く順番によって、スペースが入っていても動くかどうかが違ってくるかもしれません。
(検証してないし元のCのコードも完全に追えてませんので雰囲気で書いてます、すみません)

私の見た限りでは、PDOのDSNに書く文字列の中で、スペースが含まれた場合の挙動については、
**「半角スペースを入れても動いていること自体が偶然」**と考えるのが妥当かと思います。

よって、恐らく偶然動いているだけで保証されている動作ではないので、半角スペースは入れないほうが無難だと思います。

投稿2019/04/30 18:05

編集2019/04/30 18:07
sansaisoba

総合スコア241

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

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

退会済みユーザー

退会済みユーザー

2019/05/01 13:42

詳しくお教えくださり、ありがとうございます!
guest

0

ためしに半角スペースを入れても正常どおり実行されます。

半角スペースのある場所によっては、正しく動かないこともある、とのことです(Qiita)。

投稿2019/04/30 00:10

maisumakun

総合スコア145121

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

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

退会済みユーザー

退会済みユーザー

2019/05/01 13:43

ご回答ありがとうございます!
guest

0

ベストアンサー

[PHP+MySQL]DSNの駄目なスペースはどれか

「接続文字列」の仕様になるので、「入れても大丈夫そうだから入れとけ」では何か問題があったときに切り分けを困難にするので「入れてはいけない」とだけ書かれているその書籍の考え方は正しいと思います。

投稿2019/04/30 00:11

編集2019/04/30 00:16
m.ts10806

総合スコア80765

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

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

maisumakun

2019/04/30 00:33

内部的にしか使わない文字列ですし、「スペースを入れるメリット」というのもあまり考えられないので、できるだけ安全に「スペース無しで書く」という形にしたほうがいいですね。
m.ts10806

2019/04/30 03:03

スペース入ってるのが原因で接続できない旨の質問に何度かであったことがあるので、やはり「なしで書く」認識で良いと思います
m.ts10806

2019/04/30 03:04

わざわざ「入れても大丈夫」なパターンを覚えるメリットはないですしね。
退会済みユーザー

退会済みユーザー

2019/05/01 13:43

ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問