MySQLでのアップデートがうまくいかない

このQ&Aのポイント
  • ログイン後、IDがDBにあれば該当するデータを表示し、変更があれば更新する。
  • var_dumpでの結果はfalseで、SQLの値が戻ってこないことがわかった。
  • SQLの構文エラーが発生し、指定した値以外の変更がエラーメッセージに表示されない。
回答を見る
  • ベストアンサー

updateがうまくできない。

MySQLでのアップデートがうまくいかないので質問させていただきます。 やりたいこととしては、ログイン後、ID(customer_code)がDBにあれば、該当する行のデータを画面に表示させ、もし入力値を変更する場合は画面上で変更、「更新」ボタンを押すと、そのままDBに反映させる(update)という動きです。 未ログイン時の動きは思ったように実現できています。 var_dump( $res ); としたところ、bool(false)がかえってきたため、SQLの値がうまく戻ってきていないことがわかりました。 また、print mysql_error($conn); としたところ、「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 'comment = 'XXXX', university = 'XXXXX', favorite_sports = 'XXXXX', ' at line 1 」というようなエラーがかえってきました。 ※XXXの所は、画面で入力した文字が入っています。 1点気になっているのは、comment = 'XXXX', university = 'XXXXX', favorite_sports 以外に seibetsu などの値も変更しているのに、上部のエラー内容にのってこないこと です。 (的を得ているかわかりませんが・・。) もともとのコードは、正常に動くものからコピーをし、値の部分を適当なものに変えています。 カンマなどが間違っているのかと思い、何度か最初から試してみましたが、いっこうに変化がないため、質問させていただいた次第です。 以下のupdateのコードで何かおかしな所があればご教授いただければと思います。 よろしくお願いします。 /**----------------------------------------------------------- * * 会員登録画面で「更新」ボタンがクリックされた時の処理。 * ログイン状態に応じて、UPDATE または INSERT を実行する。 * ------------------------------------------------------------*/ if( $_REQUEST["cmd"] == "regist_member" ) { if( $_SESSION["customer_code"] != "" ) { // ここに、ログイン済の場合の処理を記述。 $sql = " update DBpractice set "; $sql .= " customer_code = '" . $_REQUEST["customer_code"] . "',"; $sql .= " pass = '" . $_REQUEST["pass"] . "',"; $sql .= " name = '" . $_REQUEST["name"] . "',"; $sql .= " mail = '" . $_REQUEST["mail"] . "'"; $sql .= " comment = '" . $_REQUEST["comment"] . "',"; $sql .= " university = '" . $_REQUEST["university"] . "',"; $sql .= " favorite_sports = '" . $_REQUEST["favorite_sports"] . "',"; $sql .= " seibetsu = '" . $_REQUEST["seibetsu"] . "',"; $sql .= " where customer_code = '" . $_SESSION["customer_code"] . "'"; $res = mysql_query( $sql ); print mysql_error($conn); var_dump( $res ); } else { // ここに、ログイン未の場合の処理を記述。 $sql = "insert into DBpractice( customer_code, pass, name, mail, comment, university, favorite_sports, seibetsu, del_flag, reg_date ) "; $sql .= "values( "; $sql .= " '".$_REQUEST["customer_code"]."', "; $sql .= " '".$_REQUEST["pass"]."', "; $sql .= " '".$_REQUEST["name"]."', "; $sql .= " '".$_REQUEST["mail"]."', "; $sql .= " '".$_REQUEST["comment"]."', "; $sql .= " '".$_REQUEST["university"]."', "; $sql .= " '".$_REQUEST["favorite_sports"]."', "; $sql .= " '".$_REQUEST["seibetsu"]."', "; $sql .= " '0', "; $sql .= " now() ) "; $res = mysql_query( $sql ); } }

  • MySQL
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

今回も凡ミスですよ >$sql .= " seibetsu = '" . $_REQUEST["seibetsu"] . "',"; 今度はカンマがいらないです これだとwhereの前にカンマがはることになります

tanakataro2010
質問者

お礼

今回は上手くできました。(しっかり更新されています。) 最初、カンマの有り無しの意味がわかりませんでしたが、今回のケースで理解することができました。 コードだけでなく、説明いただきありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

とりあえず >$sql .= " mail = '" . $_REQUEST["mail"] . "'"; のケツにカンマが抜けているのでmailとcommentのつながりが変だね

tanakataro2010
質問者

補足

ご回答ありがとうございます。 確かに、カンマがないですね。。 調べてみた所、コピー元はカンマがなくうまく動いているのですが、とりあえず自分のコードをご指摘どおり修正してみたところエラーの箇所が変わりました。 ただ、以前、問題があるようです。。 何か他にも原因が分かればご教授いただけると幸いです。 ■エラー内容 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 'where customer_code = 'XXX'' at line 1 よろしくお願いいたします。

関連するQ&A

  • 上手くUPDATEされない

    $sql5= 'UPDATE time SET id='.$id22.' , name="'.$name22.'", ji='.$ji2.' , kou='.$kou2.' , tan="'.$tan2.'" , nyu="'.$nyu2.'" WHERE id={$_GET["id"]}'; $res5 = mysql_query($sql5); 何がおかしいでしょうか・

    • ベストアンサー
    • PHP
  • MDB2 プリペアードステートメントについて

    顧客情報管理システムを開発居しています。 下記のコードはMDB2を使用して、既に入力された情報を変更するための物をテストのため簡略化した物(のはず)ですが、$res = $sth -> execute ($data);の部分でエラーが発生してしまいます。 おそらくプリペアードステートメントの問題だと思い調べてみましたがお手上げです。。 知っている方からすればかなり馬鹿らしい間違いだと思いますが。。。 教えて下さい。 ちなみにmySQLを使用しています。 <?php //DBへの接続に必要な処理は完了し、$mdb2と言うオブジェクトは既に存在している。 $sql = "UPDATE customer_list SET name = ?,post = ?,address = ?,email = ? WHERE code = ?"; $typ = array("text","integer","text","text","integer"); $sth = $mdb2 -> prepare($sql,$typ); $data = array($_POST['name'],$_POST['post'],$_POST['add'],$_POST['email'],$_POST['code']); echo $data; $res = $sth -> execute ($data); ?>

    • ベストアンサー
    • PHP
  • UPDATEできない

    PHP4.3+MySQL4.0.25+Win2000Proで構築中です。 条件が一致するかどうか調べて、一致するレコードがあれば上書き、一致しなければ新規登録をさせています。 mysql_select_db("table_name", $mysql); $result=mysql_query("SELECT * FROM challenge WHERE id=$id && dai=$dai && tyu=$tyu && syo=$syo", $mysql); $number = mysql_num_rows($result); とし、 if($number){ $sql="UPDATE challenge SET mycom='$mycom', procom='$procom', sinsei='$sinsei' where id=$id and dai=$dai and tyu=$tyu and syo=$syo"; $update=mysql_query($sql,$mysql); }else{ $sql="INSERT INTO challenge values ('$id','$dai','$tyu','$syo','$status','$mycom','$procom','$taicom','$sinsei','$kyoka')"; $insert=mysql_query($sql,$mysql); } mysql_close($mysql); 一致するレコードがあれば上書き、なければ新規登録させようとしていますが、新規書き込みはできるのですが上書きができません。 エラーがでるわけでもなし、ただ変化がないというだけです。 $updateの中身を見てみましたが何も入っていません。 ユーザーにはupdate権限がありますし、テーブルに権限は設定していません。 何かお気づきの点がありましたらご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • if()文が上手くいかない。パート2

    $sql= 'SELECT a.id,a.name,a.ji,a.pass,b.id,b.name,b.day,b.st,b.sh,b.tday,b.tt,b.th,b.go FROM t AS a, ti AS b WHERE a.id=b.id group by a.id ORDER BY b.day DESC'; $res = mysql_query($sql); $sql2 = 'SELECT * FROM ti'; $res2 = mysql_query($sql2); while($row = mysql_fetch_array($res)){ $st = $row['st']; } while($row2 = mysql_fetch_array($res2)){ if(!$st==""){ echo $row2['name'].'<br>出勤<br>'; }else{ echo $row2['name']; } } 改善点御教授下さい。お願いします。 参考:http://okwave.jp/qa/q7424432.html

    • 締切済み
    • PHP
  • UPDATEできない

    PHP初心者です。 先日より、PHPプログラムを勉強しており、「参照」、「追加」、「修正」、「削除」の一連の流れを理解しました。 スタッフ登録をするという仮定で、上記流れをPHPでできるようになり、データベースの更新もできるようになりました。 登録 → 表示 や、一覧を表示して、ラジオボタンで選んだスタッフの情報修正などです。 現在、上記流れの延長として、商品の登録から、修正、削除に挑戦していますが、情報修正時、ページはスタッフ登録と同じように最後までエラー無く進みますが、データベースが更新されません。 何故初心者の為、解決策の探し方すら判らない為困っています。 どなたかお解りになる方、恐れ入りますがご教授頂ければ幸いです。 データを修正するソースです <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>どっとこむ</title> </head> <body> <?php try { $pro_code = $_POST['code']; $pro_name = $_POST['name']; $pro_price = $_POST['price']; $pro_code = htmlspecialchars($pro_code); $pro_name = htmlspecialchars($pro_name); $pro_pass = htmlspecialchars($pro_price); $dsn = 'mysql:dbname=xxxx;host=xxxxx'; $user = 'userid'; $password = 'password'; $dbh = new PDO($dsn,$user, $password); $dbh->query('SET NAMES utf8'); $sql = 'UPDATE mst_productSET name=?,price=? WHERE code=?'; $stmt = $dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[] = $pro_code; $stmt->execute($data); $dbh = null; print 'を追加しました。<br />'; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html> 上記表示される前のページ(修正する情報を入力するページ)から、上記ページまではデータが渡っている状態です。 <?php print $pro_name; ?> のようにすると、渡された文字列が表示されます。 わかり難い説明で恐縮です。 宜しくお願い致します。

    • 締切済み
    • 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
  • eclipseでのJDBCについて

    eclipseのMySQLJDBCの外部接続に関して全く分からず手詰まりしているので、ご教授願いたいと思います。 プロジェクトの配下のweb.xmlにMySQLの接続情報を入力しました。一応ソースです。 web.xmlに <context-param> <param-name>jdbcDriver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> <description>JDBC Driver</description> </context-param> <context-param> <param-name>jdbcUri</param-name> <param-value>jdbc:mysql://localhost:3306/airticket?useUnicode=true&amp; characterEncoding=sjis</param-value> <description>MySQL URI</description> </context-param> <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> を書いて、 会員登録をするクラスに、 try{ try{ //ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception ex) { } //データベースへ接続 String url = "jdbc:mysql:///airticket?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); //ステートメントオブジェクトを生成 Statement stmt=con.createStatement(); String sql="insert into member(member_id,member_pass,family_name,first_name,birth_year,birth_month,birth_day,address,post_code,mail,"+"sex,home_tel,job) values('"+ member_id +"',"+ mempasslong +",'"+ family_name +"','"+ first_name +"',"+ birth_year +","+ birth_month +","+ birth_day +",'"+ address +"',"+ post_code +",'"+ mail +"',"+sexint+","+ home_tel +",'"+ job +"');"; int result=stmt.executeUpdate(sql);       stmt.executeBatch(); // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { message = "登録失敗しました。"; request.setAttribute("message", message); return mapping.findForward("registererror"); } message = "登録完了しました。"; request.setAttribute("message", message); return mapping.findForward("success"); } } って書いてクラスからweb.xmlを参照してデータベース接続したいんですが、エラーが出ずに困っています。そもそもクラスからweb.xmlの情報を参照するやりかたはあるのですか?教えてください

  • 携帯サイトを構築しております。登録画面にて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
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP