MySQLへの変数のinsertで、意図したものと異なる値が登録されてしまいます

このQ&Aのポイント
  • C++でMySQLへの接続をし、ソース内で得る変数をDB内のテーブルにinsertするプログラムを書き始めました。
  • 通過に要した時間を表す変数の内容をDBにinsertする部分で、意図した値とは異なる値が登録されてしまいます。
  • 正常な秒数の値をDBにinsertできる方法を教えていただきたいです。
回答を見る
  • ベストアンサー

MySQLへの変数のinsertで、意図したものと異なる値が登録されてしまいます

皆様こんにちは。 C++でMySQLへの接続をし、 ソース内で得る変数を DB内のテーブルにinsertするプログラムを書き始めました。 具体的には、 ソースプログラムがA地点とB地点を通過するまでに要した時間を 計測するプログラムなのですが、 通過に要した時間を表す変数の内容を DBにinsertする部分で 自分には分からない事が発生しました。 下記URLの質問とほぼ同じ内容だったため真似してみました。 http://questionbox.jp.msn.com/qa3838662.html 本来だとA地点とB地点間に要した時間は、 秒数で「0.000631」や「0.001031」というオーダーの値のはずなのが、 insert後に、 実際にDBをselectで参照してみると、 「781203012」 「-1304020791」 などと、全く異なる数字としてinsertされていました。 (insert作業自体は完了しているみたいです) DBにinsertする内容のソースは以下のとおりです。 ※「sec_time」 : AとB地点間の秒数を表す変数。 ---------------------------------------------------------- printf("%s\n", sec_time); // この時点は正常な秒数が表示される char query[256]; if (sprintf(query, "INSERT INTO table_20090401 VALUES (%d)", sec_time)) mysql_query(conn, query); ---------------------------------------------------------- これは、どうすれば、 「sec_time」で得た値を、 正常にDBにinsertできるようになるのでしょうか? 簡単な内容でしたら、 大変恐縮ですが、 アドバイスいただけると、とても嬉しいです。 宜しくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

%dですと 整数として出力ですよ 浮動小数点数なら float型なら%f、double型なら%lfといった具合かと 桁数を指定するなら %8.5f などのように 全体の桁数.小数点以下の桁数といった具合に指定します

mami_try
質問者

お礼

redfox63さん! とっても助かりましたし、 いい勉強になりました。 spritf や 型の部分をよく理解していなかったのが、 自分でも良く分かりました。 ありがとうございました!

関連するQ&A

  • C++でMySQLへの接続を試みるも失敗してしまいました

    皆様こんにちは。 http://questionbox.jp.msn.com/qa3838662.html http://okwave.jp/qa4845183.html 上記URLのページの内容とほぼ同一でしたので、 参考にしつつ、 C++でMySQLへの接続を行い、 プログラムの動作中で得る変数を DB内のテーブルに insertするプログラムを書いてはみたものですが、 どうもうまく行かず困っています。 プログラム内で実行したかったのは、 プログラム内で得た2つの変数を MySQLに登録するという内容でした。 プログラムを動かすと、 「不正な命令です」とプログラムが止まるのですが、 どこで止まるかを1つづつ確認したら、 MySQLにinsertコマンドを出すところで 止まるのが分かりました。 insertする2変数(「answer1」と「answer2」)は共に、 英数字で構成される100文字以内のものです。 インサートしたいテーブル名は「table_0413」としています。 テーブル「table_0413」には、 「A1」と「A2」という名前の2つのカラムを設けています。 ---------------------------------------------------------- char query[256]; if(sprintf(query, "INSERT INTO table_0413 VALUES (%s,%s)", answer1, answer2)); mysql_query(conn, query); ---------------------------------------------------------- どうすれば、 プログラム内で得た2変数の値を、 正常にDBにinsertできるようになるのでしょうか? 簡単な内容でしたら、 申し訳ありませんが、 アドバイスいただけると、とても嬉しいです。 宜しくお願いします。

  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • C言語で変数の内容をINSERTする方法

    タイトルのように、C言語で変数の内容をINSERTする方法で悩んでいます。 今はmysql_query(mysql, "insert into [DBname] values ( , , , )");で変数ではなく普通のテキストや数字をデータベースに入力することは出来るのですが、プログラム中で計算した変数をデータベースに入力できないのです。 どなたか教えてください・・・。

    • ベストアンサー
    • MySQL
  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • MySQL insertができない

    商品名とその値段を挿入しようとおもっているのですが、下記のようなエラーがでて先に進めずにいます。 Query failed: Unknown column 'item' in 'field list' <?php if($contact=mysql_connect("host","admin","root")){ echo "サーバに接続しました。<br>"; } mysql_select_db("watanabe", $contact); $query = 'INSERT INTO list(item,price) VALUES("りんご","100")'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); if($result){ echo"追加に成功しました。"; }else{ echo"追加に失敗しました。"; } ?> ご回答願えますでしょうか?

    • ベストアンサー
    • PHP
  • MySQL 文字化けについて(PHP)

    いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

    • ベストアンサー
    • MySQL
  • 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
  • MySQLのINSERT文で変数展開ができません

    はじめまして。 MySQL+PHP初心者なのですが、INSERT文中での変数展開がうまくいきません。 フォームから受け取ったデータを単純にレコードに追加するだけなのですが、 mysql_query('insert into area_tbl (area)values($area)'); areaのデータ型はテキストで、$areaをクォーテーションで囲めば当然のごとくそのまま表示されてしまいますし、事前に $area = $_POST['area'] の処理をしてもダメです。直後に echo "$area" をするとフォームに入力した文字列が表示されるので、データの受け渡しはうまくいっていると思います。また ($area) の代わりに'あいうえお'といれると【あいうえお】とデータベースに反映されるので、MySQLとPHPの日本語対応の問題もないと思います。なぜでしょうか? ご指導のほどよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルにINSERTができません(MySQL)

    独学でPHP,MySQLを勉強中です。 とあるトレーディングカードの出品サイトを作成中ですがデータのINSERTがうまくいきません。 経験も浅いので何か大きく基本をはずしているような気がしています。どなたかご教授ください。 ●登録完了ページ <?php header("Content-Type:text/html;charset=Shift_jis"); error_reporting(4); session_start(); /*SESSIONで送られてきた情報を受け取る*/ $item_f=$_SESSION['item_f']; $myID=$_SESSION['myID']; $s_code=$_SESSION['s_code']; $TNO=""; $today = date("Y/m/d H:i"); /*DBに登録*/ $db = mysql_connect("localhost", "root", "root")or die ('DB Connection Error= '. mysql_error()); mysql_select_db("regist_test_db", $db)or die ('DB Connection Error= '.mysql_error()); $rs = mysql_query("SET character set SJIS", $db); mysql_query("insert into regist_test (time,myID,s_code,CID0) values ('$today','$myID','$s_code','$item_f[0][0]')" ,$db); mysql_query("commit"); session_destroy(); ?> <html> <head><title>トレードサイトほげほげ</title></head> <p>登録が完了しました。</p> <p>トレードが成立すると良いですね!</p> <a href="index.php">検索ページへ</a> </body> </html> ●テーブル作成 regist_test_db内 create table regist_test ( TNO int auto_increment primary key, time datetime not null, myID varchar(10) not null, s_code varchar(10) not null, CID0 varchar(5) not null, ); ●補足 $_SESSION['item_f']は二次元配列で、[0][0]から[4][6]までありますが、この場では割愛しています。 試しに、 echo "today=".$today."<br>"; echo "myID=".$myID."<br>"; echo "s_code=".$s_code."<br>"; echo "item_f[0][0]=".$item_f[0][0]."<br>"; echo "item_f[0][2]=".$item_f[0][2]."<br>";  :  : と表示させることはできるので、SESSIONでデータは渡っているようです。 この登録完了ページがひらいたあと、MySQL Command Line Clientで select * from regist_test; としてもEmpty setとでてしまいます。 すみませんがお分かりの方アドバイスお願いします。

    • ベストアンサー
    • PHP