• 締切済み

例外処理について Ruby

Mysql + ruby + mysql-ruby でデータベースを扱ってます。 begin  object.query("insert into hoge values ('#{date}','#{room}';") rescue ☆  print"データ重複" end データ格納の際、プライマリキーに重複データが入るとエラーで処理が止まるので、 「データ重複」と表示したいのですが、☆には何を入れればよいのでしょうか?。 ?を指定しなくても動作するのですが、それ以外のエラー時にも、「データ重複」と表示されるのは、不安です。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

insert をする前に select で 重複データを調べるというのは?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • テーブルに入っているデータと重複チェックしたい

    やりたいこと: phpを実行して取得したデータの内容と既にDBのテーブルに格納されているデータを 比較して、 異なっていれば、新しいデータとして INSERT INTO文で テーブルにデータを登録する。 同じであれば、登録しない。 という処理がしたいです。 $sql = "select * from hoge where url= $page_uri"; $kakunin = mysql_query($sql , $db ); if ( $page_uri == $kakunin ){ //同じデータならスキップ break; } else{ $sql = mysql_query("INSERT INTO hoge VALUES (0,'$page_uri','$pon')"); と書いているのですが、以下のエラーが出てしまいます。。 Fatal error: Cannot break/continue 1 level in /www/xx.php on line 42 これは、breakは使えないよ ってことでしょうか? breakでなくても やりたいことが実現できればこだわりはないのですが、、 アドバイスよろしくお願いします。

    • 締切済み
    • PHP
  • トランザクションが効かない

    PHPでMySQLをやっています。 異なる2つのテーブルに同時にinsertをしようと思い、transactionを使って 片方がエラーならどちらにもinsertしないこと期待したのですが、 どうも効いてないみたいなんです・・・ mysql_query("begin transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; $sqlstr = "INSERT INTO table1 (id, name) VALUES ("aaaa", "山田");"; mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; $sqlstr = "INSERT INTO table2 (id, name) VALUES ("bbbb", "佐藤");"; mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; mysql_query("commit transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; ※table1には既に「id:aaaa name:鈴木」が入っています を実行して重複エラー 「1062: Duplicate entry 'aaaa' for key 1 」 が出たのですが、table2には「id:bbbb name:佐藤」が入ってしまいます。 もちろんtable1には「id:aaaa name:山田」は入りません。 どうすればトランザクションが効くようになるのでしょうか?

    • ベストアンサー
    • MySQL
  • 何が起きてたのか教えてもらえますか?

    こんにちは。プログラマ初心者です。 今回phpとMySQLを用いて登録フォームから 情報をデータベースに格納するコントローラーを作ったのですが、その際のエラーで何が起きていたかが良く分からない事があったので理由を教えていただければと思います。 まず、登録フォームからはPOSTで情報を飛ばす事になっていて、 飛んできたデータを $data = mysql_real_escape_string($_POST['data']); のようにしてエスーケプ処理を行い変数に入れ、 $sql = "INSERT INTO $table (data) VALUES ($data)" $result = mysql_query($sql, $link); として値を格納しようとしたところ Unkown column~for listというエラーが出てしまいました。 最終的に VALUES('$data'); と書けば正常に格納される事が分かったのですが、 今回のエラーではどのような解釈をされていたのでしょうか? 何故「不明のコラム」というエラーになったのか また、VALUESにおける$data と '$data'の違いは何なのでしょうか? 初歩的でバカバカしい質問かもしれませんが、ご教授よろしくお願い致します。

    • ベストアンサー
    • PHP
  • "と'の使い方を教えていただけないでしょうか

    お世話になります。 "と'の使い方で悩んでおります。 POSTでname="a"のINPUTBOXからデータを送信し、それをPHPで受けて、MySQLのテーブルのカラムに挿入するスクリプトで悩んでいます。 次のようにすると、うまく動作します。 mysql_query("INSERT INTO tb VALUES ('$_POST[a]')"); あるいは $b=$_POST[a];や$b=$_POST['a'];や$b=$_POST["a"];で mysql_query("INSERT INTO tb VALUES ('$b')"); 次のようにすると、失敗します。 mysql_query('INSERT INTO tb VALUES ("$_POST[a]")'); あるいは $b=$_POST["a"];などで mysql_query('INSERT INTO tb VALUES ("$b")'); これは私の環境だけで起こることなのでしょうか。 むしろ' 'で囲うと、文字そのものが展開されるので"$_POST[a]"としなければいけないと思うのですが。いかがでしょうか。 また、そもそも$_POST[a]で受け取るときに添字にクォーテーションはつけなくてもよいのでしょうか。 どなたか、お教えいただけないでしょうか。あるいはヒントだけでも助かります。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 受け取ったIDに該当する物にデータをDBに格納

    $query = "select * from ki where id= '{$_GET['id']}'"; こんな風に受け取ったIDによって表示が変わるページなんですが、 $sql = 'INSERT INTO kise(gazou2) VALUES ("' . $output . '")'; だと、新たにフィールドを作ってデータを格納してしまいます。 例えば{$_GET['id']}で受け取ったIDに該当するフィールドに格納したい場合 $sql = 'INSERT INTO kise(gazou2) VALUES ("' . $output . '")'; をどう改変したら良いですか?? $sql = 'INSERT INTO kise({$_GET['id']}gazou2) VALUES ("' . $output . '")'; と力ずくでしてみましたがダメでした。

    • 締切済み
    • PHP
  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • PHPによるSQL文の中にPHP処理を記述するには

    PHP内のSQL発行部分の $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[1]}`,         `{$DATA[2]}`,         `{$DATA[3]}`     ) "; このようなクエリを $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`     ) "; のような感じにしたいのですが うまくいきません。 どうすれば、クエリー文の中で$i++等の処理を 含まさせることができるでしょうか?

    • ベストアンサー
    • PHP
  • PHP phpMyAdmin

    hetemlのmysqlを利用しているのですが phpからmysqlへの格納が上手くいきません。 ■phpソース <?php $link = mysql_connect('サーバー名','ユーザー名','パスワード'); mysql_select_db('データベース名'); mysql_query("INSERT INTO myname VALUES ('test')"); echo mysql_errno($link); echo mysql_error($link); ?> ■phpMyAdmin テーブル myname を作成済 phpはエラーを出していないのですが テーブル myname のフィールドに test が格納されません。(変化ありません)

    • 締切済み
    • PHP
  • php postgres Insert と updateができない

    こんにちは、 現在、php5とpostgresql8でプログラムを行っています。 それで、 $sql = "INSERT INTO t_hoge (name) VALUES('hogesan')"; pg_exec($sql) と、テーブルにデータを入れているんですが、 エラーはでないのに何故かデータがテーブルにインサートできません。 また、アップデートで編集もできません。 しかし、SELECTで既に入力されているデータを読んでprint等で表示させると普通にデータは取れています。 また、telnet等で直接postgresに hoge=> INSERT INTO t_hoge (name) VALUES('hogesan'); と入力するとデータが挿入できます。 なにが問題なんでしょうか。 権限が問題なのでしょうか。 ちなみにテーブル作成するときは CREATE TABLE t_hoge ( name TEXT PRIMARY KEY, info TEXT ); としています。 なにか思い当たる節があれば助言していただきたいのですが。

    • ベストアンサー
    • PHP
  • MySQLのINSERT時にたまに重複になる

    下記の通り同じデータが無かった場合に限りインサートしています。 //同じデータが既にあるか確認 $sql = "select * from `reg_data` where "; $sql .= "`Date` = '".$date."' and "; $sql .= "`ID` = '".$id."' and "; $sql .= "`No` = '".$no."'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); //データが0なら今日のレコード作成 if($rows == 0){ $sql = "insert into `reg_data` values('0', '".$date."', '".$id."', '".$no.")"; mysql_query($sql); } しかし、3%ぐらいの確立で重複インサートになってしまいます。 重複といっても 1個目のフィールドはAUTO_INCREMENTになっておりまして AUTO_INCREMENTの値が重複する事は無いです。 $date、$id、$noがまったく同じテーブルがいくつか重複した場合でも AUTO_INCREMENTの値は全て連番になっています。 重複インサートが発生しないよう改善するには どうしたら良いでしょうか。 日付を2フィールド目に書いているので 0時0分1秒辺りでインサートが集中してしまいます。 分散させられたら改善するような気がしますが いい案が思いつきません。 宜しくお願い致します。

    • ベストアンサー
    • PHP