• ベストアンサー

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
  • 回答数2
  • ありがとう数0

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

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

とりあえずsqlへのデータ受け渡しがおかしそうですね。 >$sql= "insert into user set user_name=($_POST["in1"]),bil_id=・・・(略) コーテーション内の配列は引数のコーテーションをとる 必要があります。 またuser_nameはおそらくvarchar型なので、データは コーテーションでくくる必要があります。 $sql= "insert into user set user_name='{$_POST[in1]}',bil_id=・・・(略) としてはいかがでしょうか? それとmysql_insert_id()はAUTOINCREMENTとのセット のようですが、ちゃんとフィールドは用意していますか? http://www.php.net/manual/ja/function.mysql-insert-id.php

getamato
質問者

補足

ご指摘ありがとうございます。 SQL部分のコーテーションは自分でも書いた後に 気がついたのですが、修正する方法がなく・・・。 申し訳ありません。 フィールドというのはDBのTableのフィールドの 事でいいでしょうか? USERテーブルは 「userid」「user_name」「bil_id」「bil_name」 の項目があり、「userid」がAUTO_INCREMENTの項目 になっています。 確認の内容が異なっていましたらご指摘ください。 mysql_insert_id()の値の受け取り方がおかしいでしょうか?

その他の回答 (1)

回答No.2

こんにちは 念のためです。 例ではクエリの送信部分がありませんが、 mysql_insert_id()の直前に mysql_query()してますよね?

関連するQ&A

  • 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
  • 何故、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
  • トランザクションとlast_insert_id

    トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 (1) トランザクション開始 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; (3) ( ロールバック ) (4) $key=mysql_insert_id(); (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; (6) ( ロールバック ) (7) コミット (8) トランザクション終了 よろしくお願いします。 環境: php5,mysql5 (InnoDB)

    • ベストアンサー
    • MySQL
  • 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
  • データの取得方法

    失礼いたします。 SQL文でDBからデータを取得して、それを 表示したいのですがうまくいきません。 どこを間違っているか、どうしたらいいか コメントお願いします。 //他のページからIDを取得 <?php $aid=htmlspecialchars($_GET["id"]); ?> //SQL <?php $sql = "SELECT A.USERID,A.NAME,B.BIL_ID,B.B.BIL_NAME FROM USER A,BIL B WHERE A.BIL_ID=B.BIL_ID AND USER_ID=".intval($_GET["aid"]); !$an = mysql_query($sql,$db) $user = mysql_fetch_row($an); mysql_free_result($an); ?> //データの表示 //SQLで実行した'BIL_ID'を表示したい。 <TD><INPUT type="text" name="bid" value="<?php print(intval($_GET["$user[2]"])) ?>"></TD>

    • ベストアンサー
    • 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
  • LAST_INSERT_IDで同時にアクセスが会った時

    MYSQL 3.23 auto_incermentで発行されたIDを別テーブルに使いたいのです。 last_insert_id や mysql_insert_id はコネクションごとに区別されるというのは本当でしょうか? 同時に複数のinsertが実行された場合でも、同じコネクションで発行されたIDだけを取得可能でしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql_real_escape_stringについて\r\nが付くのは?

    $sql = INSERT INTO users (logid, passwd) VALUES ( "'" . mysql_real_escape_string($_POST['id']) "','" . mysql_real_escape_string($_POST['pas']) . "';" とすると全POSTデータの先頭に「\r\n」が付与されてしまいます。 INSERT INTO users (iogid, passwd) VALUES ('\r\n 入力されたID', '\r\n 入力されたパス') こんな感じになってしまいます。 SQL実行時にデータベースに入ってしまっているのか、 phpMyAdminで確認すると、文章内に改行が入ってしまっているみたいで、表のレイアウトがガタガタになっています。 SQLインジェクション対策に必要だと参考書には表記されているのですが、あまりにデータベースが見にくいので、私の使い方が間違っている様な気がします。 (1)\r\nが先頭に付与されるのは正しいのでしょうか? (2)データベースにSQLで\r\nをINSERTしると、データも\r\nが入ってしまうのでしょうか? (3)PHP + MySQLでSQLインジェクション関数はmysql_real_escape_stringだけなのでしょうか? なにぶん超初心者なので、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 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でのINSERTについての質問です。

    insert.html(入力フォーム)で <input type="text" name="company_nm" size="80"> を <form name="form1" method="post" action="insert_kakunin.php"> <input type="submit" value=" 次 へ "> で送って insert_kakunin.php(確認画面)で <input type="hidden" name="company_nm" value="<?= $company_nm ?>"> <?php print $_POST["company_nm"]; ?> で表示させます。 それを <form name="form1" method="post" action="insert.php"> <input type="submit" value=" 決 定 "> で insert.php(DB処理)で DB接続した後に $sql='INSERT INTO Sample (company_nm) VALUES("'.$_POST['company_nm'].'"); というふうにINSERTしたいんですが、VALUESに入力した値が入りません。 print $sql; print ($_POST['company_nm']); で見ても「""」となっています。 値の渡し方を教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう