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

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

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

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

Q&A

解決済

3回答

13906閲覧

AUTO_INCREMENT の場合の値のinsert方法

moitaro

総合スコア443

MySQL

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

0グッド

0クリップ

投稿2016/08/01 09:13

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

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$sql = "insert into users(email, password) values(".$_POST[mail].", ".$_POST[pass].");"; 2$result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);

と値を入れようとしましたが
出力が

クエリの送信に失敗しました。 SQL:insert into users(email, password, entryday) values(fugafuga@hogehoge, test);

と上手く入りません。

users_id int(8) NOT NULL AUTO_INCREMENT,
なので
users_idのインサート方法がよろしくないと予想しているのですが
マニュアルを見た所
https://dev.mysql.com/doc/refman/5.6/ja/example-auto-increment.html
なんか良い様な気がしております。

こんな単純な所で伺ってしまい大変申し訳ないのですが
上記なぜsql文が失敗するか伺ってよろしいでしょうか?

なお本番では
パスワード部分は
http://php.net/manual/ja/faq.passwords.php
を参考にする予定です。

以上 お問い合わせ致します。

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

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

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

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

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

guest

回答3

0

直接の原因は、
kunaiさんの回答にある通りで、
文字列として値を扱わせるにはシングルクォートで囲む必要があります。

問題を切り分けるには、エラーメッセージを見るとともに、(PHPを介さずに)MySQLにログインして直接想定するSQLを発行して、SQL自体が正しいかどうかを確認すると楽です。

それとは別の問題として、ご提示のコードには以下の2点の問題がありますので、
参考にされているサイトや書籍があるのであれば、最近のものに変更されることをお勧めします
0. SQLインジェクション脆弱性があり、セキュリティ上、非常に深刻な状態にある。
0. 非推奨とされているmysql関数を使用している。

PDOもしくはmysqliクラスもしくは関数を使い、
SQL発行時には確実に安全なSQL以外は全てプリペアードステートメントを使用することでSQLインジェクション脆弱性の作りこみを回避することが可能です。

php pdo プリペーアドステートメント

php mysqli プリペアードステートメント

投稿2016/08/01 09:53

tanat

総合スコア18709

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

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

moitaro

2016/08/02 01:37

ご忠告ありがとうございます。 不慣れなため恥ずかしいコードをさらして失礼しました。 >MySQLにログインして直接想定するSQLを発行して、SQL自体が正しいかどうかを確認すると楽です。 phpMyAdminの事でしょうか??? サーバー管理者が多忙故入れるのが困難との事…… >PDOもしくはmysqliクラスもしくは関数を使い、 http://qiita.com/yasumodev/items/bd2ba476f31804d527d3 を参考に下記のようにやりました。 -------- $mysqli = new mysqli($dbidpw['host'],$dbidpw['user'],$dbidpw['pass'], $dbidpw['db']); if ($mysqli->connect_error) { echo $mysqli->connect_error; exit(); } else { $mysqli->set_charset("utf8"); } $sql = "SELECT users_id, email,password,entryday FROM users"; if ($result = $mysqli->query($sql)) { // 連想配列を取得 while ($row = $result->fetch_assoc()) { echo $row["users_id"] . $row["email"] . "<br>"; echo ">>>>". $row["password"] . $row["entryday"] ."<<<<<br>"; } // 結果セットを閉じる $result->close(); } $query = "INSERT INTO users(email,password,entryday) VALUES ( '".$_POST[mail]."' , 'test' , NOW() )"; if( $mysqli->query( $query ) ) { echo "mmmmmmmm".$query.'mmmmmm INSERT成功'; }else { echo 'INSERT失敗'; } $mysqli->close(); -------- おかげてコードが見やすくなりました。 ありがとうございました。
guest

0

ベストアンサー

emailとpasswordが ' ' で囲われていないだけではないでしょうか。
エラーログを見て対処を考えると、何が悪いのかすぐわかるので良いです!

投稿2016/08/01 09:29

kunai

総合スコア5405

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

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

moitaro

2016/08/02 00:18

仰る通りでした…… 焦っていて失礼しました。 ini_set('display_errors', '1'); を入れるようにします。
guest

0

ちなみに
insert into users(email, password, entryday) values('fugafuga@hogehoge', 'test');

としても項目数が違うのでエラーです例示の命題ではentrydayを指定しているように
見えないのですが途中でなにか省略していますか?

insert into users(email, password, entryday) values('fugafuga@hogehoge', 'test' ,CURDATE());

的な処理をしてみてください

なおphpがどうやってMySQLにアクセスできるかは
phpinfo()でセクションMySQL、MySQLi、PDOがあるかを確認する必要があります

投稿2016/08/01 10:25

yambejp

総合スコア114583

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

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

moitaro

2016/08/02 00:08

コメントありがとうございます。 仰る通り insert into users(email, password, entryday) values('fugafuga@hogehoge', 'test'、now()); のnow()を省略しておりました。 CURDATE()の方が一般的なのですねっ そちらで実装しようかと思います。 コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問