• ベストアンサー

長い文章のデータベース格納について

phpで会員制サイトの制作を勉強しています。 データベースへはPDOで接続しています。 MySQLデータベースを使用しています。 会員制サイトによくある、 各ユーザーの自己紹介文を保存したいのです。 500文字程度の文章になると思うのですが、 そういった長い文字列データはデータベースに保存してよいのでしょうか? 長い文字列はあまりデータベースには保存すべきでないでしょうか? また、データベースに保存すべきでない場合は どのように長い文字列を保存したら良いでしょうか? ご回答、よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数10

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>htmlspecialcharsでサニタイジングすれば良いのでしょうか? そうですね 場合によってはhtmlspecialchars()に加えて trim()してあげたり、nl2br()で改行を<br>に変えてあげてもよいかと。

mmm5orz
質問者

お礼

お返事頂きありがとうございます! なるほど、trim()とnl2br()ですか・・・ 自己紹介文の表示となると確かに知識が必要ですね! 諸々、非常に詳しくご回答頂き、ありがとうございました!

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

テキストというのは非常に軽い情報です。 かなり文量があっても数キロバイトレベルなのでDBに挿入しても負荷は あまり高くなくおおむね問題ありません とくにユーザーIDと紐づくのでDBに挿入すればデータ管理は楽にできます これが例えば画像とかになると、メガ単位になるので、DBに投入しても オーバーヘッドが大きくてあまりお勧めできないです ちなみにDBの機能として「検索」や「集計」がありますが 数キロバイトの文字から特定の文字を含むレコードを抽出するのは 実はDBは得意ではありません。 機能的には「特定のカラム LIKE '%キーワード%'」などで 抽出できますが、特にTEXT型などにしてしまうと高速化につながる インデックスが効かないケースが多いです。 つまりDBで管理しているからと言ってかならずしも効率的な検索ができる というわけではないということを留意する必要があります。 その場合、特殊な処理をかけて全文検索という技法を使う場合もあります

mmm5orz
質問者

補足

ご回答ありがとうございます! なるほどです。 自己紹介文なのでDBに格納し、抽出するとしても、 検索条件はユーザーIDにし、 自己紹介文内の単語等であいまい検索をする予定はとりあえずないので、 今回の場合だと、自己紹介文を格納するカラムはTEXT型でも良いのではないかなぁ?とも思います。 また、自己紹介文をデータベースに格納する際はPDOのプレースホルダーを使用するので良いとして、抽出するときは一般的にデータを抽出する際に使用するhtmlspecialcharsでサニタイジングすれば良いのでしょうか? ご返信頂けると有難いです。

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.2

DBに保存でいいと思いますよ。

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.1

保存していいですよ。 text型で保存すればいいと思います。

mmm5orz
質問者

お礼

ご回答ありがとうございます! text型で保存します。

関連するQ&A

  • データベースに"や'を保存できない

    phpで会員制サイトの制作を勉強しています。 データベースへはPDOで接続しています。 MySQLデータベースを使用しています。 自己紹介文のような長めの文章をデータベースのTEXT型カラムにUPDATEで保存したいです。 $stmt = $db->prepare("UPDATE member SET text=:text WHERE id=:id"); $stmt -> bindParam(':text ',$text,PDO::PARAM_STR); $stmt -> bindParam(':id',$id,PDO::PARAM_INT); $stmt -> execute(); というSQL文を作成し、 文字列データを保存することはできたのですが、 「"」や「'」のような記号を含めるとそれ以降の文章が消えた状態で保存されてしまいます。 例えば顔文字などで「"」や「'」のような記号を使用する場合もあると思うので、 できれば、データベースに保存したいです。 どうしたら安全に「"」や「'」が保存できるでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PDOでのデータベース接続について質問です

    現在、PDOでのmysqlデータベースの操作を学習しています。 以前、mysql_connectでのデータベース接続を学習していた際に、 使用したいデータベースの名前を変数名$dbnameに格納し、 $connect = mysql_connect($server, $user, $password); mysql_select_db($dbname); でデータベースに接続していました。 その要領をふまえて PDOでもデータベースの名前を変数名$dbnameに格納し、 $db = new PDO('mysql:host=localhost;dbname=$dbname',$user,$password); で接続しようと試みたところ、エラーになりました。 そこで、データベース名を変数に格納せず、 $db = new PDO('mysql:host=localhost;dbname=データベース名',$user,$password); で試してみたところ、接続が出来ました。 そこで質問なのですが、PDOでデータベースに接続する場合、 データベース名を変数に格納することは物理的に出来ないのでしょうか? それともうひとつ質問があります。 mysql_connectを使用したときはデータベース接続用のPHPファイルを作成し、 データベース接続が必要なPHPファイルの時にrequire_onceでデータベース接続用のPHPファイルを呼び出ししていましたが、PDOでもデータベース接続用のPHPファイルを呼び出して接続することは可能でしょうか? 絶対に変数に格納したいとか、絶対にデータベース接続を別ファイルにしたいというわけではありませんが、もともとmysql apiで学習していたためmysql apiとPDOの違いが少し気になってしまいました。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • データベース名などこれで合っているでしょうか・・。

    すいません。初めてデータベースを扱うのですが、今までローカル環境でしか動かしていないため どのように実際に動かすのか分からない部分があります。(サイトは完成していましてローカル環境ではちゃんと動きました) まずデータベース名やアカウント名なのですが、データベースのためにさくらのサーバーを借りました。 データベースの設定画面を見ると以下のようになっています。 ----------------------------------------------------- データベース バージョン: MySQL 5.5 データベース サーバ mysql9999.db.sakura.ne.jp データベース ユーザ名 (初期アカウント名) abcd777 接続パスワード変更 ************ データベース名 abcd777_data ------------------------------------------------------- 上記の場合以下で合っているのでしょうか? $pdo = new PDO("mysql:dbname= _abcd777_data ; host=mysql9999.db.sakura.ne.jp", "abcd777", "************"); ポート番号なども設定があるような事も書いてあるサイトがあるのですが何をどうしてよいのか 全く分かりません。(とりあえず上記のような設定でデータベースからデータをphpで呼び出しましたが 上手く動きませんでした) もう一つ疑問があるのですが、私はトップページをindex.phpとしましたが、上記のような方法では アカウントやらパスワードが丸見えですよね? そもそも私は全く違う事をしているのでしょうか? できれば実際の運用の流れも簡単に書いてもらえると助かります。

  • phpでmysqlから画像パスを出力する

    phpを勉強始めたばかりで、データベースを使う必要がでてきたため、初心者サイトを 読んでいるのですが、一点質問があります。 行いたい事は、データベースに保存した画像パスをphpで出力するだけなのですが、パスが 文字列として扱われてしまっています。画像を出力するにはどうすれば良いでしょうか? 例えば以下のようなphpプログラムで、nameには画像パスである 「abc.jpg」という文字が 入っていたとすると以下ではそのままabc.jpgという文字列が出力されてしまします・・・。 <?php $pdo = new PDO("mysql:dbname=aaa", "root"); $pdo->query("set names utf8;"); $st = $pdo->query("SELECT * FROM bbb"); while ($row = $st->fetch()) { $name = htmlspecialchars($row['name']); echo '<img src="$name">'; } ?>

  • データベース(MySQL)にNULLとして格納

    下記サイトを参考にサイト上からデータベース(MySQL)のテーブルにレコードを追加できるようにしました。 http://ponk.jp/php/basic/php_mysql#page_index3 レコードの追加自体はできたのですが、テキストフィールドに何も記述されていない場合にNULLとして追加したいと思っているのですが、その方法が分かりません。 コードは次のようにしました。 $number = isset($_POST["number"]) ? $_POST["number"] : 'NULL'; $st = $pdo->prepare("INSERT INTO player(number) VALUES(?)"); $st->execute(array($number)); このコードで追加をすると、NULLではなく空白が格納されてしまいます。 どこを修正すればNULLとして格納できるようになるでしょうか? ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • データベースのlocalhostの設定について

    初心者なので的外れなことを聞いていたらすみません。 phpからPDOを使ってローカル環境のデータベースに接続しようとしたのですが、localhostの接続先を変更することはできますか? mysqlが画像の通りに2つあり、MAMPで開発を進めているのですがMAMPの方ではないmysqlに接続したいのです。 下記のように接続すると、MAMPの方のmysqlに繋がります。 $db = new PDO('mysql:dbhost=localhost;dbname=db', $user, $pass); configあたりを変更すれば良いのでしょうか? ご回答宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPデータベース・テーブルの移行

    PHPとMySQLを使ってサイト構築しています。 MySQLのデータベース「group_color」にはテーブル「pink」とテーブル「blue」があります。 サイトでログインしている会員ユーザーの情報が「pink」に入っていてユーザーが ”ブルーグループに変更する”というボタンを押すと、テーブルpinkに入っている情報がテーブルblueに移行するようにしたいのですが、PHPの表記はどのようになりますか? 「ログインしている会員の情報」を移行させたいです。 テーブルのフィールドは ・id ・name ・birthday となっています。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • MySQLでデータベースを一つのファイルにひたすら保存していいのか

    MySQLでデータベースを一つのファイルにひたすら保存していいのか PHPでMySQLを使用しています。 データベースを作る時は以前から二つの方法を使っています。 ・データベースファイルを一定のデータ量になると分割する方法 ・データベースファイルを分割せず一つのファイルにひたすら保存していく方法 これはどっちがいいのでしょうか? 一つのデータベースファイルに保存し続けるとユーザーがアクセスする際は そのデータベースファイルにしかアクセスしないので共有ロックの関係で ユーザーが増えるほど分割した場合に比べてオープンが低速化したりしないでしょうか?

    • ベストアンサー
    • PHP
  • phpのデータベースへの接続

    1.PHPでフォームデータを受け取る 2.データベースに接続をして書き込み 3.書き込まれたIDを取り出す + 数値 + 乱数を一つの文字列に結合 4.上記の文字列をデータベースに保存。 このような動作は一つのphpで可能でしょうか? 2.までの動作は問題ないのですが、 3.からが動作しません。 どなたかご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Perlでのデータベース利用

    とても一般的な質問になりますが、 そこそこ規模の大きな(目標会員数一万人)会員サイトをPerlで構築しようとしています。 問題はデータベースへのアクセス負荷なんですが、 ひとつのテーブルのレコード数が100万行ぐらいになると思います。 一般的なホスティングサーバを利用してデータベースはMySQLです。 「大規模なデータベースシステムはJAVAサーブレットが向いている」と言う話をよく聞きますが、上述のような規模のサイトは(Perl or PHP)+MySQLでは難しいのでしょうか? 出来たらPerlで通してみたいと考えております。 ご意見、ご指導よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう