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

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

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

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

PHP

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

Q&A

解決済

2回答

7818閲覧

insertした際のprimary keyの値を知りたい。

moitaro

総合スコア443

MySQL

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

PHP

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

0グッド

0クリップ

投稿2016/08/02 05:36

度々お世話になっております。

sql

1CREATE TABLE users ( 2 users_id int(8) NOT NULL AUTO_INCREMENT, 3 email varchar(255) NOT NULL, 4 password varchar(255) NOT NULL, 5 entryday DATETIME, 6 primary key(users_id) 7);

php

1$query = "INSERT INTO users(email,password,entryday) VALUES ( '".$_POST[mail]."' , '".$passhash."' , NOW() )";

とインサートした際のusers_idを取得したいのですが
良い方法はご存じありませんでしょうか?

またその調査方法をお教え頂けますと嬉しく思います。

phpinfo(); でバージョンを調査した所
PHP Version 5.4.39-0+deb7u2 なのですが
last_insert_id() やら mysql_insert_id();がないようなので困っております。

php

1$query = 'select last_insert_id() from users'; 2$result = mysql_query($query); 3$row = mysql_fetch_array($result); 4echo "<br>row>>>>".$row."<<<<<br>"; 5 6$last_id = mysql_insert_id(); 7echo "<br>last_id>>>>".$last_id."<<<<<br>";

上記 良い方法がございましたらご助力頂けますと嬉しく思います。

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

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

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

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

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

guest

回答2

0

ベストアンサー

たとえばこう

PHP

1$mysqli = new mysqli(なんとか) 2$query = "INSERT INTO users(email,password,entryday) VALUES ( '".mysqli_real_escape_string($_POST["mail"])."' , '".mysqli_real_escape_string($passhash)."' , NOW() )"; 3$mysqli->query( $query ) ; 4$sql = 'select * from users where users_id=last_insert_id()'; 5$row = $result->fetch_assoc(); 6echo "{$row["users_id"]}/{$row["name]"}/{$row["entryday"]}<br>";

mysqliの手続き型でデータ投入する際はprepareしないならエスケープしてください
last_insert_idに合致するidはユニークなのでwhileは不要
users_idを2回参照していたのでentrydayにしときました

投稿2016/08/02 06:50

yambejp

総合スコア114777

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

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

moitaro

2016/08/02 07:10

ありがとうございます。 ```php $query = "INSERT INTO users(email,password,entryday) VALUES ( '".$_POST["mail"]."' , '".$passhash."' , NOW() )"; if( $mysqli->query( $query ) ) { echo "mmmmmmmm".$query.'mmmmmm INSERT成功'; }else { echo 'INSERT失敗'; } $sql = 'select * from users where users_id=last_insert_id()'; $result=$mysqli->query($sql); $row = $result->fetch_assoc(); echo ">>>>>>>>>>>>>>>>>>".$row["users_id"]."<<<<<<<<<<<<<<<<<<<<<<br>"; ``` で最後に加えたusers_idが取得出来ました。 ありがとうございます。
yambejp

2016/08/02 07:16

まぁusers_idだけほしいのであれば $sql = 'select last_insert_id() as users_id'; $result=$mysqli->query($sql); $row = $result->fetch_assoc(); print $row["users_id"]; と、別名をつけて呼び出すだけでよいかと
KiyoshiMotoki

2016/08/02 07:48

moitaro様、yambejp様 横から失礼します。 念のため補足させていただきますが、mysqli_insert_id() で取得できる値は  > 直前のクエリで更新された AUTO_INCREMENT フィールドの値  http://php.net/manual/ja/mysqli.insert-id.php であって 「primary keyの値」 ではありません。 ご質問のケースでは "users_id" カラムが PRIMARY KEY と AUTO_INCREMENT の両方の属性を持っているためにこれで問題ありませんが、 本来、これらの属性は別々の概念(※)ですので、混同しないようご注意ください。 ※AUTO_INCREMENT属性は PRIMARY KEY でないカラムに付けることもできます すでにご認識でしたら、お読み捨てください。
yambejp

2016/08/02 07:51

KiyoshiMotokiさんフォローありがとうございます。 たしかに安易な表現をしていましたね 以後気をつけるようにします
guest

0

select last_insert_id() from users

いや、「select last_insert_id()」だけでいいです
同じセッション内で参照(INSERTの直後に発行)すれば所定のusers_idがかえってくるはずです

投稿2016/08/02 05:41

yambejp

総合スコア114777

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

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

moitaro

2016/08/02 06:44 編集

コメントありがとうございます。 基本的な事をお伺いして大変恐縮なのですが ```php $mysqli = new mysqli(なんとか) $query = "INSERT INTO users(email,password,entryday) VALUES ( '".$_POST["mail"]."' , '".$passhash."' , NOW() )"; $mysqli->query( $query ) ; $sql = 'select last_insert_id()'; if ($result = $mysqli->query($sql)) { // 連想配列を取得 print_r($result); // while ($row = $result->fetch_assoc()) { // echo $row[users_id] . $row[name] . $row[users_id] ."<br>"; // } // 結果セットを閉じる $result->close(); } ``` と書いていて困ったのですが そのlast_insert_id()の値はどのように表記して表示されるのでしょうか? お手数をかけて大変申し訳ないのですが上記お問い合わせ致します。
yambejp

2016/08/02 06:52

あ、すみません 追記せずに別回答しちゃいました、そちら参照ください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問