PHPでのINSERT文実行エラーとデータが保存されない問題の解決策

このQ&Aのポイント
  • PHPでフォームで入力された値をINSERT文でMYSQLへ保存する際に、実行エラーが発生し、データが保存されない状況が発生しています。
  • 具体的には、mysql_query()関数とmysql_free_result()関数の引数のエラーが発生しています。
  • この問題を解決するためには、mysql_connect()関数の代わりにmysqli_connect()関数を使用し、mysqli_query()関数とmysqli_free_result()関数を使用する必要があります。また、エスケープ処理も行うことが重要です。
回答を見る
  • ベストアンサー

緊急です。insert文が実行されない

フォームで入力された値をINSERT文でMYSQLへ保存しようとしているのですが、 以下のように記述して実行し、phpmyadminでテーブルを確認しても データが入力されておらず空のテーブルとなっています ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <?php $SCR = $_POST['junni']; $Name = $_POST['namae']; $Day = $_POST['hiduke']; $conn = mysql_connect($url,$user,$pass); $sdb = mysql_select_db($db,$conn); $sql = "insert into `seiseki`(`name`,`day`,`score`)values('$Name','$Day','$SCR')"; $res = mysql_query($sql,$sdb,$conn); mysql_free_result($res); mysql_close($conn); ?> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 補足として、 実行後、 Warning: mysql_query() expects at most 2 parameters, 3 given in 「phpの場所とファイル名」 on line 26 Warning: mysql_free_result() expects parameter 1 to be resource, null given in 「phpの場所とファイル名」 on line 28 という表示がされます また、$conn =のあとに print ($Day"); print ($Name"); などを入れると値は表示されているため、受け渡しは問題ないかと思います また、$url,$user,$pass,$dbは、$SCR = $_POST['junni'];以前に $url = "localhost";というような形で代入しており、入力ミスなどは何度も確認しましたがありません 知識がほとんどありませんので、説明足らずかもしれませんが、 文法、入力間違いや解決策がありましたらよろしくお願いいたします

  • MySQL
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

 知識うんぬんはともかくとして、エラーメッセージが出ているのですからそれを読んでみてはいかがでしょうか。 > Warning: mysql_query() expects at most 2 parameters, 3 given in 「phpの場所とファイル名」 on line 26 訳: 警告: mysql_query() は多くとも2つのパラメーターを期待します。3つが渡されています。  mysql_query()のメソッド定義を調べて、正しい呼び出し方をしてあげてください。 → http://jp2.php.net/manual/ja/function.mysql-query.php > Warning: mysql_free_result() expects parameter 1 to be resource, null given in 「phpの場所とファイル名」 on line 28 訳: 警告: mysql_free_result() は第1のパラメーターがresource型である事を期待します。nullが渡されています。  $resがnullだからですね。これは先ほどのmysql_query()が失敗しているからと推測されますが、そもそも$resの破棄はSELECTを行った結果である場合のみなのではないでしょうか。INSERTの時に結果を破棄する事が必要なのか調べてみてください。 → http://jp2.php.net/manual/ja/function.mysql-query.phphttp://jp2.php.net/manual/ja/function.mysql-free-result.php

KITA0620
質問者

お礼

ありがとうございました^^ 英語がほぼわからずエラーの意味が訳せませんでした^^; $res = mysql_query($sql,$sdb,$conn); の部分を $res = mysql_query($sql); と改変し、無事入力することができました また、mysql_free_result() は、お書きになった通りこの場合不必要なものでした ご指摘ありがとうございます

その他の回答 (2)

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

もしかすると英語はまったくダメな感じでしょうか? 私はPHP知りませんが、言葉を読む限り ・26行目で、最大2個の引数を期待しているが、お前は3個渡した ・28行目で、リソースになる1つのパラメータを期待しているが、お前はnullを渡した といわれてますよ。 最低限の基本的な書き方が分かっていないことも問題だとは思いますが、 せっかくわかりやすいメッセージを出してもらっているのに 言葉を理解していないがために通じない不幸な状態に見えます。 PHP: mysql_query - Manual http://php.net/manual/ja/function.mysql-query.php mysql_query http://manual.xwd.jp/function.mysql-query.html mysql_query:SQLを実行する http://bg.pi-ppi.com/page/n01/000144.html mysql_query - MySQL クエリを送信する http://phpspot.net/php/man/php/function.mysql-query.html

KITA0620
質問者

お礼

ご指摘ありがとうございました^^ お書きになっている通り英語がほぼわからずエラーの意味が訳せませんでした^^; $res = mysql_query($sql,$sdb,$conn); の部分を $res = mysql_query($sql); と改変し、無事入力することができました 緊急で作成しているため基本を学習している時間がなく、 サンプルや本を参考にコードをつなげているだけの状態です;; ご迷惑をおかけし、申し訳ありませんでした

回答No.1

PHP やったことないんですけど >Warning: mysql_query() expects at most 2 parameters, 3 given in 「phpの場所とファイル名」 on line 26 「mysql_query() パラメータは最大2つまでですけど、3つありますよ。」 という意味なんですが、大丈夫なんですか? $res = mysql_query($sql,$sdb,$conn); ↑ ここが違うんじゃないかと思うのですが…。

KITA0620
質問者

お礼

ありがとうございました^^ 英語がほぼわからずエラーの意味が訳せませんでした $res = mysql_query($sql,$sdb,$conn); の部分を $res = mysql_query($sql); と改変し、無事入力することができました

関連するQ&A

  • Insert文がうまく実行されません

    データベースへの書込みを試みています。 先日質問させていただき、この状態で問題なく動いているのですが 入力フィールドを増やすと送信後、send_data.phpのソースが表示されてしまいます。 どなたかよろしくお願いします。 【index.html】 <head><script LANGUAGE="JavaScript"> <!--// function check(){ var strMSG; strMSG = document.search.msg.value; document.open(); document.writeln('<html>\n<head>'); document.writeln('<title></title>'); document.writeln('</head>'); document.writeln('<body>'); document.writeln('<form method="POST" action="send_data.php">'); document.writeln(strMSG); document.writeln('<input type="hidden" name="MSG" value="' + strMSG + '">'); document.writeln('<br>\n<br>\n<input type="submit" value="送信"> '); document.writeln('<input type="button" value="修正" onclick="history.back()">\n</form>'); document.writeln('</body>\n</html>'); document.close(); } //--> </script> </head> <body> <form name="search" method="POST"> ご意見<br> <textarea name="msg"></textarea><br> <input type="button" value=" 確認 " onClick="check()"> <input type=reset value=" 取消 "><br> </form></body> 【send_data.php】 <?php $con = mysql_connect("localhost","root",""); $selectdb = mysql_select_db("bri_db",$con); $sql = "insert into t_research(msg) values('$_POST[MSG]')"; mysql_query($sql,$con); mysql_close($con); ?> <html> <head></head> <body> 完了<br> <a href="index.html">続けて入力 </body> </html>

    • ベストアンサー
    • PHP
  • phpでmysqlを検索、計算

    PHPでmysql内のデータを、条件で絞込み、 一致するものの平均と個数を画面で表示したいのですが、 エラーが表示され、検索結果を表示することができません 現在書いているコードは以下になります ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <html> <head> <title>検索結果</title> </head> <body> <?php ~~省略~~ $Name = $_POST['namae']; $Day = $_POST['hiduke']; $conn = mysql_connect($url,$user,$pass); $sdb = mysql_select_db($db,$conn); $sql1 = select avg(score) from seiseki where name = "$Name" and day like "$Day*"; $sql2 = select count(score) from seiseki where name = "$Name" and day like "$Day*"; $sql3 = select count(score) from seiseki where name = "$Name" and day like "$Day*" and score = 1; $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); $res3 = mysql_query($sql3);  print "<table border=1 cellpadding=0 cellspacing=0>\n";  print "<tr>\n";  print "<td>合計</td>";  print "<td align=right>{$sql2}回</td>;"  print "</tr>\n";    print "<tr>"; print "<td>1</td>";  print "<td align=right>{$sql3}回</td>;"  print "</tr>\n";    print "<tr>\n";  print "<td>平均</td>";  print "<td align=right>{$sql1}</td>";  print "</tr>\n";  print "</table>\n"; mysql_free_result($res,&res2,&res3); mysql_close($conn); ?> </body> </html> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー seisekiテーブルにはnameとdayとscoreがあり、 nameはyamadatarouのようにローマ字で dayは20110110のように数字で scoreには1~4の数字が入っています nameは完全一致、dayは前方一致で sql1では数字の平均、sql2では合計回数、sql3では1の回数をカウントしています 30行目「$sql1 = select avg(score) ~ ~ ~」のあたりに記述エラーがあると表示されるので、 おそらく検索方法の文法が間違っているのですが、 色々調べてみても記述の仕方がこの方法以外見つかりません 何か記述方法の間違いや別の記述方法がありましたら、ご教授お願いいたします また、現在エラーは表示されていませんが、 print近辺も見ようみ真似での記述ですので、間違いなどがありましたら ご教授いただけないでしょうか

    • ベストアンサー
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • 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
  • 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
  • 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
  • IDとパスワードを認証すコードをかきましたが動きません

    phpの超初心者です、よろしくお願いします。 IDとパスワードを認証すコードをかきましたが動きません。 Formから別に使ったdbにあるIDとパスを見に行くコードでが、 dbにあるIDとパスと同じものを打ち込んでも認証しません、 また別のdbにあるIDとパスを打ち込んでも認証するときがあります。 一体どこが悪いのでしょうか。どこが悪いのかさっぱり分かりません。 よろしくお願いします。 --------------------------------------- <?php $conn = mysql_connect(localhost, "root", ""); //DBにコネクト mysql_select_db('login_test', $conn); //'login_test'をselect mysql_query('SET NAMES utf8'); //defalt $res_init=mysql_query('SELECT * from user'); //userからすべてのdataを取得 while($arr = mysql_fetch_assoc($res_init)){ //結果セットが無くなるまでループ foreach($arr as $k => $v){ echo "フィールド ".$k." の値は ".$v; echo "<br />"; } echo "<br />"; } //formからDATAを取得 $id=$_POST['input_ID']; $pass=$_POST['input_pass']; print("入力したid= ".$id." 入力したpass= ".$pass); //認証check if(auth ($id,$pass,$conn)===true){ print("認証成功"); } else{ print("認証不成功"); } //function function auth ($id,$pass,$conn){ $sql = "SELECT * from user WHERE user_id = $id AND password = '$pass'"; $res = mysql_query($sql, $conn); return $res; } ?> <form action="http://localhost/test/test.php" method="POST"> IDの入力:<input type="text" name="input_ID"><br /><br /> Passの入力:<input type="text" name="input_pass"><br /><br /> <input type="submit" name="delete_submit" value="送信"><br /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • mysqlのレコード削除

    会員登録を削除するプログラムなのですが削除できません。 ログイン時に$_SESSION['id']を既に持っている状態で$_SESSION['id']は mysqlで自動連番が付加されるPRIMARY KEY (id)です。 --- html --- <form method="post" action="unregist.php"> ~アンケート的なものでここの内容は関係ありませんので中略~ <input type="submit" name="unregist" value="退会する"> </form> --- php --- session_start(); session_regenerate_id(true); // データベース接続設定 require_once dirname(__FILE__) . "/../db_conn.php"; $conn = mysql_connect("$db_sv", "$db_user", "$db_pass") or die("接続エラー"); mysql_query("SET NAMES 'utf8'", $conn); mysql_select_db("$db_name", $conn) or die("接続エラー"); if (isset($_POST['unregist'])) { $sql = "DELETE FORM members WHERE id ='" . $_SESSION['id'] . "'"; if (mysql_query($sql, $conn)) { mysql_free_result($res); mysql_close($conn); } else { echo 'エラー!管理へお問い合わせ下さい。'; } 退会するをクリックしてもエラー!管理へお問い合わせ下さい。と 出てしまうのですがどこかおかしい箇所があるでしょうか? 調べてみたのですが自分ではわからずだったので宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 何故、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
  • MySqlに登録したデータを更新すると文字化けする

    PHP5.2 MySql5.1.34 文字コードSJIS MySqlに登録したデータを更新すると文字化けします。 回答をよろしくお願い致します。 // MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES 'sjis'") or die("can not SET NAMES sjis"); // データを取り出す $sql = "SELECT created_at, mes, url FROM message WHERE (id = ".$_POST["id"].");"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); // 取り出したデータを表示する print "<form action=koushin.php method=post accept-charset=\"Shift_JIS\">"; print "日付:<input type=text size=30 name=created_at value=" . $row["created_at"] . "> "; print("<br>"); print("<br>"); print "メッセージ:<input type=text size=50 name=mes value=" . $row["mes"] . "> "; print("<br>"); print("<br>"); print "URL:<input type=text size=80 name=url value=" . $row["url"] . "> "; print "<input type=hidden name=id value=" .$_POST["id"]. ">"; print("<br>"); print("<br>"); print "<input type=submit value=更新>"; print("<br>"); print("<br>"); print "</form>"; koushin.php <?php $sv = "サーバ"; $dbname = "データベース"; $user = "ユーザー"; $pass = "パスワード"; $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); $id = $_POST["id"]; $created_at = $_POST["created_at"]; $mes = $_POST["mes"]; $url = $_POST["url"]; $sql = "UPDATE message SET updated_at = now() , created_at = '{$created_at}' , mes = '{$mes}' , url = '{$url}' WHERE id = $id"; $res = mysql_query($sql, $conn) or die("更新エラー"); mysql_close($conn); ?>

    • ベストアンサー
    • MySQL