• ベストアンサー

検索項目のデータの比較確認方法が分かりません。

データベースの主キーの時刻と同じ時刻のデータを 持っていた場合には、UPDATEで修正する。主キーと 同じ時刻とは異なったデータを持っている場合には、 INSERTでDBに書き込みをしたいのですが、うまく動 作させることができない状況です。 $DSQ[0][0] = "2007-01-31 11:00:00"; $DSQ[0][1] = 2.5; $DSQ[0][2] = 3.7; $DSQ[0][3] = -0.8; $DDSQ[0][0] = "INSERT INTO data VALUES('".$DSQ[0][0]. "',".$DSQ[0][0]. ",".$DSQ[0][1]. ",".$DSQ[0][2]. ")"; $DDSQ[1][0] = "UPDATE data SET record_time = ".$DSQ[0][0].", data01 = ,".$DSQ[0][0].", data02 = ,".$DSQ[0][1].", data03 = ,".$DSQ[0][2]. ")"; $MySQL['conn'] = @mysql_connect($MySQL['HOST'],$MySQL['USER'],$MySQL['PASSWORD']) or exit('MySQLへ接続できませんでした'); mysql_select_db($MySQL['DATABASE'], $MySQL['conn']); $MySQL['query'] = "SELECT * FROM data WHERE record_time = '$DSQ[0][0]'"; $MySQL['result'] = mysql_query( $MySQL['query'],$MySQL['conn'] ); while($tableD = mysql_fetch_array($MySQL['result'],MYSQL_NUM)) { print_r("data_view = ".$tableD); print("\n"); } if( $DSQ[0][0] != $tableD[0]){ $MySQL['result2'] = mysql_query( $DDSQ[0][0],$MySQL['conn'] ) or exit($i.'番目のデータがMySQLへ書き込みできませんでした'); }else{ $MySQL['result2'] = mysql_query( $DDSQ[1][0],$MySQL['conn'] ) or exit($i.'番目のデータがMySQLへ書き込みできませんでした'); }

  • PHP
  • 回答数2
  • ありがとう数1

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

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

細かく見てないのでなんともいえませんが、 ある場合は更新で、ない場合は追加という仕様でしたら REPLACEがよろしいのでは?

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/replace.html
trigene
質問者

お礼

ありがとうございます。参考にさせて頂きます。

その他の回答 (1)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

こんばんは。 ちょっと気になったのですが、ご質問に示して頂いたコード中 $DDSQ[1][0] = "UPDATE data SET record_time = ".$DSQ[0][0].", data01 = ,".$DSQ[0][0].", data02 = ,".$DSQ[0][1].", data03 = ,".$DSQ[0][2]. ")"; の部分が (1) SQL 文中のカッコが釣り合っていない(右カッコしかない)ので、エラーと解釈され、何事も行われない (2)上記を修正してエラーが無くなっても「where句」がないので、全レコードに対してUPDATEが かかってしまう のではないかな?と思いました。

関連するQ&A

  • 何故、mysql_insert_id が not a valid になるのでしょうか?  

    MySQLバージョン サーバ5.0.45、 クライアント 3.23.49 Apache2.0.61 (Win32) PHP4.4.7 の環境下で、 名称 member, id int(10) unsigned not null auto_increment、 name, varchar(20) not null, mail varchar(30) not null のテーブルを作りました。          次のスクリプトを書いて <?php session_start(); $name = $_POST["name"]; $mail = $_POST["mail"]; print_r($_POST); $conn = mysql_pconnect("localhost", "ABC", "XYZ") or die("Can't connect"); mysql_select_db("SIMEI", $conn) or die("db error") ; $query = "INSERT INTO member (name, mail) VALUES ('$name','$mail')"; $result = mysql_query($query, $conn); //$oid = 'mysql_insert_id($result)'; //''で括ってみる $oid = mysql_insert_id($result); // ← 11行 $result = mysql_query( "SELECT id FROM member WHERE oid = $oid", $conn); if($result){ print("insert OK");}  echo "Can't insert "; $_SESSION['id'] = mysql_result($result, 0); // ← 14行 mysql_close($conn); ?> これを実行すると、 データはmysql DB に登録されますが、下記のエラーが出て、id を取得できません。 何故でしょうか? どうすれば不具合を解決することができるでしょうか? Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in C:\・・・・\insert.php on line 11 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\・・・・・\insert.php on line 14

    • ベストアンサー
    • MySQL
  • テーブルのデータをarray (array (***, ***)) の形式で取得したい

    id、氏名、年月日(date)、点数(tensu)の列を持つテーブルseiseki があります。 <?php $conn_id = mysql_connect("localhost","root","*****") or die('Error connecting to MySQL'); mysql_select_db('******',$conn_id); $query ="SELECT date,tensu from seiseki; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $date = array(); $tensu = array(); while($row = mysql_fetch_array($result)){ $date[] = $row['date']; $tensu = $row['tensu']; } print_r($date); echo "<br/>\n";      ←15行目 print_r($tensu); echo "<br/>\n";      ←16行目 ?> これをブラウザで見ると、 Array ( [0] => 2009-05-01 [1] => 2009-06-07 [2] => 2009-07-24 ・・・・・・ ) Array ( [0] => 80 [1] => 75 [2] => 90 ・・・・・・・ ) となります。 15,16行目をコメントアウトして print_r($row[“date”],[“$tensu”]); とするとエラーになります。 array (array (2009-05-01, 80), array (2009-06-07, 75 ), array (2009-07-24 , 90)・・・・・・・ ); の形式でデータを取得するにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • データ検索

    PHPからMYSQLのデータを検索するごくごく簡単なプログラムを作ってみようと思いました。 どうやらデーターベースにアクセスしていないような・・・・・??? 初心者です。申し訳ありませんがよろしくお願い致します。 <? $db = mysql_connect(); mysql_select_db('suzu'); //前画面からのパラメータ $ab = $_POST["Memb"]; //一致データ検索 $sql = " select * from Toshokan \n " . " where to_menb = '$ab' " ; $res = mysql_db_query($db,$sql); $arycol = mysql_fetch_array($res,MYSQL_ASSOC); print ("$ab"); print ("###"); print ($res["to_menb"]); print ("***"); print ("$FMemb"); print ("###"); print ($arycol['to_post1']); if ( $res == $FALSE ) { die("新規登録"); } else { die("更新"); } mysql_free_result ($res); mysql_close($db); ?> 結果 上記の print ($res["to_menb"]); print ($arycol['to_post1']); は出力されずにダミー状態です。 データーベースにアクセスされていないと考えたのですが、、、、、 どなたかご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • PHPをまたいだロックの管理

    現在、PHPとMySQLを使ってデータ管理のプログラムを構築しています。 その中で、複数のPHPをまたいで同じデータテーブルを使おうとしたときに デッドロックが起きないようロック用のテーブルを作り、 データテーブルを編集するときにテーブルロック判定をかけようとしているのですが、 エラーが出てしまい上手くいきません。 以下に現状のプログラムを置いておきます。 もしお手隙でしたら、どなたかアドバイスいただけますでしょうか。 どうぞよろしくお願いいたします。 (ここから) $conn = @mysql_connect(DB_HOST, DB_NAME, DB_PASS); if (!$conn || !mysql_select_db(DB_MASTER, $conn)){ echo "DBopenError:DBオープン時エラーが発生しました。<DB>"; } mysql_set_charset('utf8', $conn); mysql_query('SET AUTOCOMMIT = 0;', $conn); mysql_query('START TRANSACTION;', $conn); // テーブルのロック mysql_query('LOCK TABLES tbllock WRITE, tbldata WRITE, temp WRITE;', $conn); // ロックの判定 $lock = checkLock($conn, 'tbldata', $sessID); // テーブルのロックを解除 mysql_query('UNLOCK TABLES;', $conn); $cnt = 0; while ($lock === false) { if ($cnt > 10) break; sleep(1); $lock = checkLock($conn, 'tbldata', $sessID); $cnt++; } if($lock === false) die('タイムアウトしました。'); else{ /* データ編集処理 */ } if (mysql_errno($conn)) mysql_query('COMMIT;', $conn); else mysql_query('ROLLBACK;', $conn); mysql_close($conn); //------------------------------------------------------------------ // 編集ロックチェック //------------------------------------------------------------------ function checkLock($dbID, $selTable, $oldsid) { $sqlstr = sprintf("SELECT * FROM tbllock WHERE tblName = '%s' FOR UPDATE;", $selTable); $result = mysql_query($sqlstr, $conn); $num = mysql_numrows($result); $flg = false; if ($num > 0) { if(mysql_result($result, 0, 'enable') === '0' || strlen(mysql_result($result, 0, 'lockUser')) === 0) $flg = true; else { if(in_array(mysql_result($result, 0, 'lockUser'), $oldsid)) $flg = true; else { $lockedDate = strtotime('-5 minute'); if (strtotime(mysql_result($result, 0, 'lockedDate')) < $lockedDate) { $sqlstr = sprintf("UPDATE tbllock SET enable = '0' WHERE tblName = '%s';", $selTable); $result = mysql_query($sqlstr, $dbID); $flg = true; } } } } if ($flg === true) { $sqlstr = sprintf("UPDATE tbllock SET lockUser = '%s', lockedDate = NOW(), enable = '1' WHERE tblName = '%s';", session_id(), $selTable); $result = mysql_query($sqlstr, $dbID); return true; } else return false; } (ここまで)

    • 締切済み
    • PHP
  • MySQLに同じデータがあるかどうか確認する方法

    掲示板でスパム投稿を排除するために、同じ投稿内容は投稿できないようにしたいと思っています。 データはMySQLにありまして、bbsというテーブル名でpostdataというフィールド名を利用しています。 $sql = "select * from bbs where postdata = '$postdata'"; $res = db_query($sql, $conn); $rows = mysql_num_rows($res); if ($rows > 0) { exit; } 投稿する前にDBをチェックして同じ投稿だったらexitするようにしているつもりですが、同じ投稿内容なのにチェックされずに投稿されてしまいます。 何がいけないのでしょうか?postdata = '$postdata'" 日本語の文字列をチェックするのは無理があるのでしょうか。

    • ベストアンサー
    • PHP
  • phpからinsertできない

    またお世話になります。 PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。 ソースを見ていただけますでしょうか? $con = mysql_connect("localhost","user","password") or die("MySQLに接続できません。"); mysql_select_db('test'); $sql = "SET CHARACTER SET UTF8"; $result = mysql_query($sql); $data1 = $HTTP_POST_VARS["inpdata1"]; $data2 = $HTTP_POST_VARS["inpdata2"]; $data3 = $HTTP_POST_VARS["inpdata3"]; $sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);'; $result = mysql_query($sql); print $data1; //ここでは通常にデータが表示されるので print $data2; //データの受け渡しは問題ないはずですが。 print $data3; mysql_free_result($result); mysql_close($con);

    • ベストアンサー
    • MySQL
  • mysql_fetch_objectにデータを取得させたいのですが、うまく行きません。

    データ型 name varchar(30), item1 char(8), item2 int(6) で、テーブルが下記のようなっています。 | name |item1 | item2 | | taro | abcd | 53 | | taro | efghk | 48 | | taro | lmnp | 02 | while文で array_push($ydata, $row->item1) として $row = mysql_fetch_object($result) にデータを取得させたいのですが(スクリプト下記)、 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT item1,item2 from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); while($row = mysql_fetch_object($result)){   ←10行目 // array_push($ydata, $row->item1);      //  ここに下記の13、14行目を追記 } var_dump($row);echo"<br />\n"; var_dump($result); print_r($row); echo"<br />\n"; これでブラウザから見ると bool(false) resource(3) of type (mysql result) としか出ません。(19行目の結果は表示されません。) そのため 13: echo "item1",$row['item1'],"<br>"; 14 echo "item2",$row['item2'],"<br>"; と追記してブラウザから見ると、単に [ item1 ]とだけ表示されます。 10 行目を while($row = mysql_fetch_arrayt($result)){ に変えてブラウザから見ると item1abcd item253 imem1efghk item250 item1lmnp item258 bool(false) resource(3) of type (mysql result)   となります。 $row = mysql_fetch_object($result) にデータを取得させるにはどのように修正すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • phpでのmysqlからjsonファイルの変換

    <? php   include("mysql2json.class.php");   //MySQL接続設定 define("DBSV", "PHPSRV"); define("DBNAME", "koukin"); define("DBUSER", "root"); define("DBPASS", "");   //MySQL接続 $conn = mysql_connect(DBSV, DBUSER, DBPASS) or die(); mysql_query("SET NAMES utf8",$conn); mysql_select_db(DBNAME, $conn);   //SQLクエリの発行 $num=0; $sql = "SELECT * FROM komento"; $result = mysql_query($sql, $conn); $num=mysql_affected_rows();   // クラスを呼び出して出力 $objJSON=new mysql2json(); print(trim($objJSON->getJSON($result,$num)));   ?> というプログラムをあるサイトを参考にさせてもらってしようさせてもらっているのですが、なぜか実行すると、getJSON($result,$num))); ?>としか出力されません。 どうしてでしょうか?

    • ベストアンサー
    • PHP
  • foreachの処理方法について

    ●やりたい事 【変更前】は抽出した顧客を一度に全て処理していた。 【変更後】は抽出した顧客を100件ごとに処理したい。 抽出後の処理をforeachでやっているので 100件処理して次の101件目からなど、どう対処してよいか わかりません。よい対処方法があれな教えてください。 ※「対象条件のデータを全件抽出する」部分は変更したくないです。 その後の処理で対応できればと考えています。 DB接続処理は省略してます。 【変更前】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); foreach($data as $value){ //該当顧客を対象に処理する } 【変更後】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); //ループ数の計算 $loop = ceil( count($data) / 100 ); //************************************* //ここで$dataを分割できないでしょうか? //************************************* for($i=0;i<$loop;$i++){ foreach($data as $value){ //該当100件ごと顧客を対象に処理する } }

    • ベストアンサー
    • PHP
  • MYSQLにINSERTできません。

    見よう見まねでやっている超初心者です。 恥を忍んで質問させて頂きます。 古いPHP(2003年ごろ)関連書籍に下記のような include.phpファイルがあるのですが、DB接続失敗、クエリ発行エラー等の エラー表示は出ないのですが(65行目位の、管理者パスワードチェック : _chkPass)でパスワードがMYSQLにINSERTできません。 PHPバージョンの違いなのでしょうか(私のはPHPV5 XAMPPです。) 色々試したりMYSQLの確認をしたのですが、どこがイケないのか、 どこをどう直したらいいのか全く分かりません。 このプログラムに不具合は無いのか?あったとしたらどう直したら動くようになるのか? わかる方どうかご教授の程よろしくお願い致します。 具体的にご教授頂けると大変助かります。 <?php putenv("TZ=JST-9"); define( "_DB_SERVER", "localhost"); define( "_DB_NAME", "cgiweb" ); define( "_DB_UID", "root" ); define( "_DB_PASS", "" ); //--------------------------------------------------------- // DB接続 : _dbConnect //--------------------------------------------------------- function _dbConnect(){ //DB接続 $_conn = mysql_connect( _DB_SERVER, _DB_UID, _DB_PASS) or die('DB接続失敗 = ' . mysql_error()); //DB選択 mysql_select_db( _DB_NAME, $_conn) or die('DB選択失敗 = ' . mysql_error()); return( $_conn ); } //--------------------------------------------------------- // DB切断 : _dbDisconnect //--------------------------------------------------------- function _dbDisconnect( $_conn ){ //DB切断 mysql_close($_conn); } //--------------------------------------------------------- // クエリ発行 : _query //--------------------------------------------------------- function _query( $_conn, $_query ){ $_result=mysql_query($_query,$_conn) or die('クエリ発行エラー = ' .mysql_error()); return( $_result ); } //--------------------------------------------------------- // FETCH実行 : _fetchArray //--------------------------------------------------------- function _fetchArray( $_result ){ $_row = mysql_fetch_array($_result,MYSQL_ASSOC); return( $_row ); } //--------------------------------------------------------- // 結果セット開放 : _freeResult //--------------------------------------------------------- function _freeResult($_result){ mysql_free_result($_result); } //--------------------------------------------------------- // 管理者パスワードチェック : _chkPass // 引数:コネクション // チェック対象パスワード // 戻値:_OK or _NG //--------------------------------------------------------- function _chkPass( $_conn, $_input_pass ){ $_err_str = ""; if( ! $_input_pass ){ //パスワード未設定なら入力画面を表示 $_err_str = "パスワードを入力してください"; } else{ //パスワードがあるなら店舗マスタの内容と比較 $_result = _query( $_conn, "SELECT tenpo_pass FROM tenpo_mst" ); $_row = _fetchArray( $_result ); if( $_row ){ //レコードがあればチェック if( $_input_pass != $_row['tenpo_pass'] ){ //認証NGなので、入力画面を再表示 $_err_str = "パスワードが誤っています"; } }else{ //レコードがなければ入力されたパスワードでレコード作成 $_sql = ""; $_sql .= "INSERT INTO tenpo_mst ("; $_sql .= " tenpo_name,"; $_sql .= " tenpo_pass,"; $_sql .= " zei_kbn,"; $_sql .= " zeiritsu,"; $_sql .= " zei_kirisute_kbn,"; $_sql .= " order_status"; $_sql .= " ) VALUES ("; $_sql .= " '',"; $_sql .= " '" . addslashes($_input_pass) . "',"; $_sql .= " 2,"; $_sql .= " 0,"; $_sql .= " 0,"; $_sql .= " 0"; $_sql .= " )"; _query( $_conn, $_sql ); } _freeResult( $_result ); } //入力画面表示の場合 if( $_err_str != "" ){ echo "<HTML>\n"; echo "<HEAD>\n"; echo "<TITLE>管理者認証</TITLE>\n"; echo "</HEAD>\n"; echo "<BODY>\n"; echo "<CENTER>\n"; echo "<FONT COLOR=RED SIZE=5>管理者認証</FONT>\n"; echo "<HR>\n"; echo "${_err_str}<BR><BR>\n"; echo "<FORM ACTION=\"mnt_menu.php\" METHOD=\"POST\">\n"; echo "<FONT COLOR=RED SIZE=2>※記号を除く半角小文字8文字以内</FONT><BR>\n"; echo "パスワード:<INPUT TYPE=\"password\" NAME=\"post_pass\" MAXLENGTH=8>\n"; echo "<INPUT TYPE=\"submit\" VALUE=\"送信\">\n"; echo "</FORM>\n"; echo "<HR>\n"; echo "</CENTER>\n"; echo "</BODY>\n"; echo "</HTML>\n"; _dbDisconnect($_conn); exit; } } ?> 以下省略しました。

    • ベストアンサー
    • PHP