mysql_insert_id が not a valid になる原因と解決方法

このQ&Aのポイント
  • MySQLのバージョンが異なることが原因で、mysql_insert_idがnot a validになることがあります。
  • また、MySQLの接続リソースが正しく指定されていないことも原因です。
  • 解決方法としては、MySQLのバージョンに応じて適切な関数を使用するか、接続リソースを正しく指定する必要があります。
回答を見る
  • ベストアンサー

何故、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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

$resultを渡すのが間違っているような。

参考URL:
http://search.goo.ne.jp/web.jsp?MT=php+mysql_insert_id&STYPE=web&IE=UTF-8&from=gootop
spindle
質問者

お礼

ありがとうございました。お蔭様で解決しました。

関連するQ&A

  • PHPを使ってMySQLのフィールドの追加ができない

    function部分は外部ファイル function getResult($query){ $result[result]=mysql_query($query,$this->connect) or die(mysql_error()); $result[count]=@mysql_num_rows($result[result]); return $result; } $null = ""; $query="insert into main values ($_POST[id],'$_POST[name]',$null,$null,$null,'$null')"; $insert[result]=$db->getResult($query); このように記述してmainテーブル内に新規フィールドの追加をしようとしたのですが、次のようなエラーが出ます。 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 ',,'')' at line 1 $nullは結局NULL値なので、 ($_POST[id],'$_POST[name]',,,,) でやってみたのですが、これも同じです。 当たり前といえば当たり前ですが、 ($_POST[id],'$_POST[name]',,,,)を ($_POST[id],'$_POST[name]')と 省略してみましたが、数が合わないとエラーが返ってきました。 定型のfunctionに頼らず、$insert[result]=$db->getResult($query);のかわりに if(mysql_query($query,$db->connect)){ echo"成功"; }else{ echo"失敗"; } このようにも試してみたのですが、データは追加されず、失敗と表示されてしまいます。 どこをどう修正すればいいでしょうか。 どなたかお助けください。 ちなみに1,3~5番目が数値型で、2,6番目が文字型、1番目以外はNULLを許可しています。 どこもオートインクリメントは使用していません。

    • ベストアンサー
    • PHP
  • PHP+mysql データ重複登録

    ◆PHPバージョン 5.3.3 ◆mysqlバージョン 4.1.22 ◆テーブル情報 `no` int(11) NOT NULL auto_increment, `name` text NOT NULL, `mail` text NOT NULL, `memo` text NOT NULL, `updating` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`no`) ENGINE=MyISAM DEFAULT CHARSET=utf8 ◆SQL (1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc') (2)insert test set name='abc', mail='abc@test.com', memo='abc' ◆処理概要 $conn = mysql_connect(ホスト、ユーザ、パスワード); mysql_query("set names utf8"); $rs = mysql_select_db(DB名, $conn); $result = mysql_query(SQL, $conn); ◆登録情報 (1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'), (2, '', '', '', '2011-09-02 16:28:57'), 【問題】 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql_insert_id()の使い方

    過去記事を参照させていただいたのですが、 値を取ってくることができず修正点がわかりません。 アドバイスいただければと思いますのでお願いします。 テーブルは 「userid」「user_name」「bil_id」「bil_name」 で、「user_name」「bil_id」「bil_name」は、 他から「in1」~で読み込んでいます。 //SQL $sql= "insert into user set user_name=($_POST["in1"]),bil_id=・・・(略) $rec=mysql_insert_id(); print($rec); 書き方に不明な点が多いですがコメントよろしくお願いします。

    • ベストアンサー
    • PHP
  • if($mode == "insert"){ の書き方についてアドバイスをお願いします。

    FC4、php5とmysql4.1.20を入れて学習しています。 入力フォームに <form action="insert.php?mode=insert" method="POST"......と書き、 データ受取phpスクリプトに <? if($mode == "insert"){ $conn = mysql_connect("localhost","root","pass"); mysql_select_db("testDB","$conn"); $sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')"; ........... と書いたサンプルがあります。 ところが、入力フォームにデータをいれ、登録ボタンを押すと urlが、 http://localhost/***/insert.phpから http://localhost/***/insert.php?mode=insert に変わりますが、入力欄が白紙に戻ってデータ登録が出来ません。(そもそも、DBに接続が出来ません。) php.iniの register_globals = On にしても、状況は同じです。 コマンドライン上では、同じユーザ名パスワードでmysqlに順調に接続できデータ登録も出来ます。 試みに、php.iniの register_globals = Offで if($mode == "insert"){ を、if($_POST['$mode == insert']){ と変えてみましたが、解決出来ません。この書き方が拙いのでしょうか? 何かアドバイスを頂ければ有り難いです。よろしくお願いします。

    • ベストアンサー
    • 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
  • mysqli_insert_idについて

    古いサーバーから新しいサーバーに入れ替え、 PHPが5.1から5.6に変わったため、PHPのファイルを修正しています。 だいたい修正ができたのですが、どうしても「mysql_insert_id」が修正できません。 修正したソースは以下になります。 ******************************** $sql = "INSERT INTO img_k (img_name,img_caption,up_datetime) VALUES('".$in_img."','".$in_img_text."',now())"; mysqli_query(connect(), $sql) or die(mysql_error()."<br>$sql"); $id = mysqli_insert_id(connect()); ********************************* $idにINSERTした最新のIDを取得したいのですが、結果は「0」になります。 IDはmysqlでauto_incrementに設定してます。 connect()は別ファイルでデータベースの接続してます。 これでIDが取得できず先に進めない状態です。 あと「オブジェクト指向型」ではなく「手続き型」でお願いします。 どうかよろしくお願いします。

    • ベストアンサー
    • 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
  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • 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のDB操作につきまして

    PHPの初心者です。あまり上達せず、困っていました。 よろしくお願いします。 用件は、POSTからもらったデータをMysqlへ追加する操作です。 とある参考書に書いてあるように、 しても、エラーで追加されません。 ちなみに、$commentの箇所を省いて、nameとpasswordだけにすると ちゃんと追加されます。これが不思議なんです。 DBへのアカウントやパスは間違っていません。 PHPのバージョンは5です。 // データの文字コードを変換する関数 function cnv_dbstring{ XXXXXX変換するコードXXXXX } if (count($_POST) > 0) { $name = $_POST["name"]; $password = $_POST["password"]; $comment = $_POST["comment"]; // データが送信されたときはデータを追加する if (strlen($name) and strlen($password) and strlen($comment)){ // データを追加する $sql = "INSERT INTO xx_xxxx_usr(name, password, comment) VALUES( '".cnv_sqlstr(cnv_dbstring($name, $db_enc))."', '".cnv_sqlstr(cnv_dbstring($password, $db_enc))."', ".cnv_sqlstr(cnv_dbstring($comment, $db_enc)).") ;"; mysql_query($sql, $conn) or die("データ追加エラー"); ←このエラーが出ます。 echo "<p>追加されたデータのID:".mysql_insert_id($conn); } }

    • ベストアンサー
    • PHP