🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

PHP

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

Q&A

解決済

2回答

644閲覧

.に取る値の分離は正しい動作か また 値が0になる

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

0グッド

0クリップ

投稿2019/09/28 23:25

編集2019/09/28 23:32

様々なサイトを参考にしてPDOでMySQLに書き込む処理を書くことができました。
そこで二点質問です。

PHP

1$_SERVER["REMOTE_ADDR"]

でIPアドレスを取得してMySQLに格納しているのですが最初の2文字しか表示されません。
.があると文字列が別れてしまう仕様なのでしょうか?

テーブルには3つのカラム?があります。id,mg,ip

そのうちmgが全て0になってしまいます。

以下PHPの全文を提示させていただきます。

PHP

1<?php 2$dsn = 'mysql:dbname=DB;host=localhost'; 3$user = 'root'; 4$password = 'password'; 5try { 6 $dbh = new PDO($dsn, $user, $password); 7} catch (PDOException $e) { 8 echo 'Connection failed: ' . $e->getMessage(); 9} 10$max = $dbh->query("SELECT MAX(id) FROM test02")->fetchColumn(); 11$sql = 'INSERT INTO test02 (id, mg, ip) VALUE (:id, :mg, :ip)'; 12$prepare = $dbh->prepare($sql); 13$prepare->bindValue(':id', $max+1, PDO::PARAM_INT); 14$prepare->bindValue(':mg', 'kobayashi', PDO::PARAM_INT); 15$prepare->bindValue(':ip', $_SERVER["REMOTE_ADDR"], PDO::PARAM_INT); 16$prepare->execute(); 17$sql = 'SELECT * test02'; 18$prepare = $dbh->prepare($sql); 19$prepare->execute(); 20$result = $prepare->fetchAll(PDO::FETCH_ASSOC); 21var_dump($result);

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

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

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

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

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

cateye

2019/09/28 23:34 編集

SQLから離れて随分に成るので外してるかもだけど・・・ 格納時、文字列(IPアドレス)はシングルクオート(')で囲ってありますか?
cateye

2019/09/28 23:40 編集

(':mg', 'kobayashi', PDO::PARAM_INT)や (':ip', $_SERVER["REMOTE_ADDR"], PDO::PARAM_INT)は PDO::PARAM_STR なのでは?
guest

回答2

0

ベストアンサー

PDO::PARAM_INT

整数だと指定しているからでは?

投稿2019/09/29 00:40

otn

総合スコア85886

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

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

otn

2019/09/29 06:36

'kobayashi' を整数に変換すると 0 で、'192.168.1.1`を整数に変換すると 192 です。 整数に変換せずに文字列のまま格納するのでは?
退会済みユーザー

退会済みユーザー

2019/09/29 06:46

PDO::PARAM_INT の仕様って、7.2 以降で直ったって記事を見たんですけど、直ったんですかね? コードも検証も確認できてないんで、未だに昔の仕様前提で int キャストしてるんですけど^^;
退会済みユーザー

退会済みユーザー

2019/09/29 11:01

7.3.9 で検証してみましたが、やっぱり問題残ったままですね^^; PDO::PARAM_INT では文字列はキャストされないです。
guest

0

エラーが出てもおかしくない気がしますが。。。

$prepare->bindValue(':mg', 'kobayashi', PDO::PARAM_INT);

'kobayashi'を投入しようとして失敗しているのだと思いますが、テーブル定義が不明なので、今の質問だと回答まではたどり着かないです。

まず、問題箇所を例外として表示できるようにオプションを設定してください。
あわせて、try-chatch のくくる範囲が適切ではないので修正して、問題箇所を洗い出すと良いです。

初学者が PDO を使用する場合の設定は、おおよそテンプレで対応できます。
*実務では別ですw

以下を参考にしてください。
PHP で MySQL 接続時に必要な知識(最小限版)

テンプレが理解できたら、上記からりんくのあるPHPでデータベースに接続するときのまとめを学習すると良いです。

投稿2019/09/29 00:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kyoya0819

2019/09/29 01:38

投稿日が今日という衝撃の事実。
退会済みユーザー

退会済みユーザー

2019/09/29 02:19

何に衝撃を受けたのでしょうか?
退会済みユーザー

退会済みユーザー

2019/09/29 08:07

リンクありがとうございます。家に到着後拝見させていただきます。 一点質問なのですが、実務だとどのような記述方法をされるのでしょうか?
退会済みユーザー

退会済みユーザー

2019/09/29 10:30

回答読まないで聞くとか失礼な人ですね。リンク先に書いてます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問