3

最後のIDを取得するために追加の選択を行うことなく、 Mysqlでphpを使用してデータベーステーブルに挿入している現在のレコードのIDを取得する方法はありますか?

たとえば、テーブルに id、url、name の列があり、url がクエリ変数としてドメイン名と現在の id で構成されている場合: domainname.com/page.php?id=current_id

$sql="INSERT INTO Persons (id, url, name )
VALUES
('domainname.com/page.php?id=".**whats_the_current_id**."','$_POST[age]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
4

5 に答える 5

4

私の知る限り、挿入しようとしているIDを見つけるための「クリーンな」方法はありません(あなたの質問から私が理解していることから、これはあなたが知りたいことです)。

私の意見では、醜いものから始まる 2 つのオプションがありselect max(id) from Personsます。私が言ったように、それは醜く、信頼できません。

より良いオプションは、最初に url のダミー値を含むレコードを挿入し、次に挿入したばかりの行の ID を で取得することmysql_insert_id()です。次に、そのレコードを正しい URL 値で更新します。

挿入クエリに続く選択クエリなしで ID を取得する方法を求められましたが、私が言ったように、これは可能ではないと思います。

于 2012-07-25T20:47:17.417 に答える
3

私はmysql_insert_id()そのために使います。それは正常に動作します。

// pseudo-ish code
$query = "INSERT something .... "
$updated = $db->run_query($query);
$id = mysql_insert_id();
于 2012-07-25T20:36:00.110 に答える
1

あなたのテーブルはこのようにする必要があります

ID AUTO_INCREMENT
person_id VARCHAR
person_url ...
person_name ...

あなたの投稿フォームのようなもの

<form method="post">
  <input type="hidden" name="id" value="<?php echo uniqid() ?>" />
   ...
</form>

クエリは次のようになります。

$person_id   = intval($_POST['id']);
$person_url  = mysql_real_escape_string($_POST['url']);
$person_name = mysql_real_escape_string($_POST['name']);

mysql_query("INSERT INTO Persons (person_id, persno_url, person_name) VALUES ( {$person_id} , {$person_url}, {$person_name} )");

$ID = mysql_insert_id();
于 2012-07-25T20:58:07.213 に答える
0

現在の ID は にあり$_GET['id']ます。クエリに挿入する前にサニタイズする必要があります。

$id = intval($_GET['id']);

次に、$idクエリで使用します。

于 2012-07-25T20:41:33.240 に答える
-2

最初の挿入の周りにクラスを追加し、次に 2 番目の選択を追加した場合。その場合、選択は機能します。

<?php
class insert1{
     function inserthere(){
          ***insert***
     }
}
class select1{
     function selecthere(){
          ***select***
     }
}
$a = new insert1;
$a->inserthere();
$b = new select1;
$b->selecthere();
?>
于 2012-07-25T20:41:55.763 に答える