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

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

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

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

SQL

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

Q&A

解決済

1回答

15573閲覧

mysqlでテーブルを作成するときは、電話番号はint型が適していますか?

dog57

総合スコア131

MySQL

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

SQL

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

0グッド

1クリップ

投稿2017/12/02 10:19

編集2017/12/02 10:21

mysqlでテーブルを作成するときは、電話番号はint型が適していますか?

PDOでDBに登録しようとすると上手く登録できない現象が起きています。

イメージ説明
イメージ説明

登録完了画面

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', TRUE); 4error_reporting(E_ALL); 5 6session_start(); 7 8header("Content-type: text/html; charset=utf-8"); 9 10require_once(__DIR__. '/db.php'); 11//配列を文字列に変換する(DBに登録した配列を使う時は、逆にデコードをする) 12$hobbyData = $_SESSION["hobby"]; 13$_SESSION["hobby"] = serialize($hobbyData); 14 15 16 17 18 19try { 20 21 $dbh = new PDO($dsn, $user, $password); 22 $statement = $dbh->prepare("INSERT INTO users (name, email, password, tel, prefectures, hobby, gender, contact, creation_time) VALUES (:name, :email, :password, :tel, :prefectures, :hobby, :gender, :contact, :creation_time)"); 23 24 if ($statement) { 25 26 $date = date_default_timezone_set('Asia/Tokyo'); 27 $date = new DateTime(); 28 $date = $date->format('Y-m-d H:i:s'); 29 30 // プレースホルダへ実際の値を設定する 31 $statement->bindValue(':name', $_SESSION["name"], PDO::PARAM_STR); 32 $statement->bindValue(':email', $_SESSION["email"], PDO::PARAM_STR); 33 $statement->bindValue(':password', $_SESSION["password"], PDO::PARAM_STR); 34 $statement->bindValue(':tel', $_SESSION["tel"], PDO::PARAM_STR); 35 $statement->bindValue(':prefectures', $_SESSION["prefectures"], PDO::PARAM_STR); 36 $statement->bindValue(':hobby', $_SESSION["hobby"], PDO::PARAM_STR); 37 $statement->bindValue(':gender', $_SESSION["gender"], PDO::PARAM_STR); 38 $statement->bindValue(':contact', $_SESSION["contact"], PDO::PARAM_STR); 39 $statement->bindValue(':creation_time', $date, PDO::PARAM_STR); 40 41 42 43 // 実行する 44 if (!$statement->execute()) { 45 $errors['error'] = "登録失敗しました。 "; 46 } 47 48 //データベース切断 49 $dbh = null; 50 51 52 } 53 54 55} catch (PDOException $e) { 56 print('Error:'.$e->getMessage()); 57 $errors['error'] = "データベース接続失敗しました。"; 58} 59 60 61 62 ?> 63 64 65 <!DOCTYPE html> 66 <html> 67 <head> 68 <meta charset="utf-8"> 69 <title>登録完了</title> 70 </head> 71 <body> 72 73登録完了! 74 75 76 77<a href="http://192.168.33.15"><button type="button" name="singlebutton" class="btn btn-primary" id="singlebutton">戻る</button></a> 78 79 80 81 </body> 82 </html> 83

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

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

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

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

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

guest

回答1

0

ベストアンサー

電話番号はハイフンの位置なども意味ある情報ですので、文字列として管理した方が良いかと思います。
国際電話番号(+81等)の管理をする場合にも同様です。

質問に記載のテーブルでは、携帯電話番号などで、2^31-1を超える値を入力しようとしてオーバーフローしているように見えます。
数値で管理すると、頭の0を補完する必要が出てくるようにも思いますので、やはり文字列での管理が適切かと思います。

投稿2017/12/02 10:46

編集2017/12/02 10:52
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dog57

2017/12/02 11:15

わかりました! ご回答いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問