• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:何が起きてたのか教えてもらえますか?)

PHPとMySQLを用いた登録フォームにおけるエラーの解釈と違いについて

demesukeの回答

  • demesuke
  • ベストアンサー率50% (1/2)
回答No.2

それってSQL文の問題だと思いますよ。 insert into tablename (data) values ('hoge'); → ○ insert into tablename (data) values (hoge); → × カラムの型がchar, varchar,text型などの場合はシングルクオートが必要です。

katu0dasi
質問者

お礼

なるほど、やはりただの初歩的なミスなんですね・・・ この時クォートで括らないとどの様に解釈されているのかが気になる所ですが、 それはもう開発者に聞くしか無いんですかね^^; ありがとうございました。

関連するQ&A

  • mysqlのinsert文について、ご指導をお願いいたします。

    はじめまして。 プログラミング初心者です。 現在、PHP&MySQLで会員制掲示板を制作しようと奮闘しております。 会員登録フォームを作成し、下記SQL文にて会員登録を行おうとしているのですが、「エラーは出ていないのに、DBにデータが登録されない。」状況で、なにがおかしいのかわからず非常に困っております。尚、DBには正常に接続されています。 環境はVISTAにXAMPPを入れております。 私、PHP初心者のため、本のサンプルソースを加工して使用しようとしています。 下記にソースを記載いたしますので、 どうかご指導のほどお願いいたします。 (※情報が不足しておりましたら申し訳ありません。必要な情報をお教えいただけましたら幸いです。) // 接続 $link = mysql_connect( $db_host, $db_user, $db_password ); mysql_select_db( $db_name ); $result = mysql_query( 'set character set utf8' ); $sql = "select email1 from users where email = '" . mysql_real_escape_string( $_POST['email'] ) . "'"; $result = mysql_query( $sql ); // if ( $error != '' ) exit; // 会員データの挿入 $sql = "insert into member ( login_id, passwd, register_date, nickname, sex, birthday, email, pref, division, state ) values ( '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . md5( $_POST['passwd'] ) . "', '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $_POST['nickname'] ) . "', '" . mysql_real_escape_string( $_POST['sex'] ) . "', '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . mysql_real_escape_string( $_POST['pref'] ) . "', '" . mysql_real_escape_string( $_POST['division'] ) . "', '1' )"; $result = mysql_query( $sql ); //echo $sql; // $title = '会員登録[3/4]'; ?>

    • ベストアンサー
    • PHP
  • 重複が

    新規登録の時の重複をチェックしたいです テーブルのカラムはシンプルにidとnameとpassだけです nameに同じ名前の人がいると困るので、HTMLフォームから送られた名前と登録してある名前の重複がないかチェックするようにできますか? やってみましたが動きません(ーー;; $name = mysql_real_escape_string($_POST['name']); $name3=array(); $name2 = mysql_query('SELECT name FROM hoge2 WHERE name=$name'); while($data = mysql_fetch_assoc($name2)) { array_push($name3, $data['name']); } if(isset($name3)){ print "重複があります"; }else{ //ここからsql $sql = sprintf('INSERT INTO hoge2 SET name="%s", pass="%s"', $name, mysql_real_escape_string($_POST['pass']) ); //ここまで mysql_query($sql) or die(mysql_error()); }

    • ベストアンサー
    • MySQL
  • mysql_real_escape_stringについて\r\nが付くのは?

    $sql = INSERT INTO users (logid, passwd) VALUES ( "'" . mysql_real_escape_string($_POST['id']) "','" . mysql_real_escape_string($_POST['pas']) . "';" とすると全POSTデータの先頭に「\r\n」が付与されてしまいます。 INSERT INTO users (iogid, passwd) VALUES ('\r\n 入力されたID', '\r\n 入力されたパス') こんな感じになってしまいます。 SQL実行時にデータベースに入ってしまっているのか、 phpMyAdminで確認すると、文章内に改行が入ってしまっているみたいで、表のレイアウトがガタガタになっています。 SQLインジェクション対策に必要だと参考書には表記されているのですが、あまりにデータベースが見にくいので、私の使い方が間違っている様な気がします。 (1)\r\nが先頭に付与されるのは正しいのでしょうか? (2)データベースにSQLで\r\nをINSERTしると、データも\r\nが入ってしまうのでしょうか? (3)PHP + MySQLでSQLインジェクション関数はmysql_real_escape_stringだけなのでしょうか? なにぶん超初心者なので、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでデータ登録がうまくいかない

    いつもお世話になっています。 早速質問です。 ユーザ登録フォームの作成をしています。 Select文を使って2重登録の確認後、DBに登録するのですが 2重登録はちゃんと機能しているのに、登録が出来ません。 どのようにしたらいいか、アドバイスいただけますか? お手数ですが、よろしくお願いします。 mysql_query("lock tables user_data write"); $sql = "select USER from user_data where USER = '" . $_POST["USER"] . "'"; $res = mysql_query($sql); if (mysql_num_rows($res) > 0) { echo "すでに登録済みです。"; mysql_query("unlock tables"); mysql_close($con); exit; } $sql = "insert into user_data(USER, pass) values ('" . $_POST["USER"] . "','" . $_POST["pass"] . "');"; mysql_query($sql); mysql_query("unlock tables"); mysql_close($con);

    • ベストアンサー
    • MySQL
  • SQL文のSyntaxエラー

    お世話になります。 以下のSQL文でSyntaxエラーが出てしまい、考えても考えてもエラーが出続けているので「どこでエラーが発生して、訂正したSQL文」をご教授いただければ幸いです。 $sql="insert into 'post' ("name","comment","created_at") values ('" . mysql_real_escape_string($name) . "','" . mysql_real_escape_string($comment) . "','" . date('Y-m-d H:i:s') . "')"; PHP内でのSQL文です。参考にしたのは技術評論社「パーフェクトPHP」p.190です。 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • PHP+MySQLでエスケープされたデータを格納したい。

    php.iniの設定でmagic_quotes_gpc = Offにして、 mysql_real_escape_stringで出力エスケープしたデータを MySQLに格納するとバックスラッシュが格納されない。 エスケープされたデータを格納したいです。 php.iniの設定 --------------------------------------------------------- ; Magic quotes for incoming GET/POST/Cookie data. ; magic_quotes_gpc = On magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of '). magic_quotes_sybase = Off --------------------------------------------------------- $_POST['us_fname']には「'user'」という文字列が格納されています。 --------------------------------------------------------- $clean['us_fname'] = $_POST['us_fname']; $mysql['us_fname'] = mysql_real_escape_string($clean['us_fname']); $sql = "insert into table ( us_fname ) values ( '".$mysql['us_fname']."', ) "; --------------------------------------------------------- echo $mysql['us_fname']; で確認すると「\"user\" 」となっているんですが、 MySQLの中を確認すると「'user'」のままでシングルクォートがエスケープされていません。

    • ベストアンサー
    • PHP
  • 携帯サイトを構築しております。登録画面にてSELECT+INSERT文

    携帯サイトを構築しております。登録画面にてSELECT+INSERT文にてDuplicate entry for keyというエラーがでてしまいます。解決方法がわからない状態です。ご教授お願いいたします。ちなみにIDはPRIMARYでauto_incrementで、mailとNoは個別でUNIQUE KEYに設定しております。 <?php // データベースに接続する $conn = mysql_connect("xxxx","xxxxx","123456") or die("接続エラー"); mysql_query("set character set sjis") or die("エラー"); mysql_select_db("aaa") or die("接続エラー"); //すでに登録済みかどうか調べる $sql = sprintf("SELECT mail,No FROM users where (mail = '%s')or(No = '%s')", mysql_real_escape_string($mail), mysql_real_escape_string($No)); $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $count = mysql_num_rows($res); //データが抽出できたときはすでに登録済みと判断できる if($count > 0) { print '<font color="red">既に登録されております</font><br /> <a href="login.html">こちらからログインしてください</a>'; } ?> <?php DBに接続 $con = mysql_connect("xxxxxxx","xxxxxx","4123456")or die(mysql_error()); mysql_query("set character set sjis") or die("エラー"); mysql_select_db("xxxxxxx")or die(mysql_error()); $sql = "INSERT INTO users(name,kana,nick,sex,pass,mail,No,date)VALUES('".$name."','".$kana."','".$nick."','".$sex."','".$pass."','".$mail."','".$No."',NOW())"; $res = mysql_query($sql) or die(mysql_error()); mysql_close($con); function mysql_insert_string($table_name, $values) { $names = '`'.implode('`,`', array_keys($values)).'`'; $values = implode(',', array_map(mysql_escape, $values)); return "INSERT INTO `{$table_name}` ({$names}) VALUES({$values});"; } function mysql_escape($value) { switch (true) { case is_null($value) : return 'NULL'; case is_bool($value) : return $value ? 1 : 0; case is_numeric($value) : return $value; default : return "'".mysql_real_escape_string($value)."'"; } } ?>

    • 締切済み
    • PHP
  • パスワードの暗号化

    php+mysqlでシンプルな会員登録を作りたいのですがパスワードは暗号化したほうがいいですか? パスワードを簡単に暗号化できる方法はありますか? postされたpassと暗号化されたpassのチェック方法がわかりません ログイン if ($_POST['id'] !='' && $_POST['pass'] !='') { $sql = sprintf('SELECT * FROM hoge WHERE id="%s" AND pass="%s"', mysql_real_escape_string($_POST['id']), mysql_real_escape_string($_POST['pass']) ); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { $_SESSION['id'] = $table['id']; $_SESSION['name'] = $table['name']; } else { //エラー }

    • ベストアンサー
    • MySQL
  • ユーザーアカウンントの重複を防ぐプログラム

    最近、PHPを勉強し始めた初心者です。 入力フォームに任意のアカウント等を入力し、すでに使われているアカウントならば警告文表示させて登録できないようなプログラムを作成したのですが if (empty($error)) {  $sql = sprintf('SELECT COUNT(*) AS cnt FROM book_table WHERE management="%s"',  mysql_real_escape_string($_POST['management']));  $record = mysql_query($sql) or die(mysql_error());  $table = mysql_fetch_assoc($record);  if ($table['cnt'] > 0) {   $error['management'] = 'duplicate';  } } これだと新規入力の場合は十分なのですが一度登録した内容を編集入力フォームで変更した場合にアカウントに変更がない場合、登録できなくなってしまいます。 どうしたら良いでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLにmd5が登録できません。

    md5を使ってパスワードをハッシュ化したものをPHPからMySQLに登録したいのですが、エラーが出てしまい登録できません。 データベースの質問になるのかもしれませんが、PHPで開発しているので一応こちらで質問させていただきます。 MySQL:バージョン 5.0.41 PHP:バージョン 5.1.6 参考文献:PHPEC PHPによるECサイトプログラミング~ショッピングカートから決済まで(著:大角清美) 【PHPからの挿入文】 $sql = "insert into users (     s_login_id,     s_password,     s_register_date,     s_birthday,     s_email1,     s_postal_code,     ) values (     '".mysql_real_escape_string($_POST['s_email1'])."',     '".md5($_POST['s_password'])."',     '".date('Y-m-d H:i:s')."',     '".mysql_real_escape_string($_POST['s_year'].'_'. $_POST['s_month'] .'_'. $_POST['s_day'] . '00:00:00') ."',     '".mysql_real_escape_string($_POST['s_email1'])."',     '".mysql_real_escape_string($_POST['s_postal1'] .$_POST['s_postal2'])."', )"; 【MySQLに直接命令を打ち込んだ時のエラー文】 ERROR 1064 (42000):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's_email1'])."', '".md5($_POST['s_password'])."', '".date('Y-m-d H:i:s')."', ' at line 16 練習としてショッピングサイトを作ってみようと本を見ながら練習している最中なのですが、近くに質問できる相手がいなくて困っております。 宜しくお願い致します。

    • ベストアンサー
    • PHP