【问题标题】:Get the id of current mysql insert获取当前mysql插入的id
【发布时间】:2012-07-25 20:28:19
【问题描述】:

有没有办法将当前记录的 ID 我 INSERTING 使用 php 和 Mysql 获取到数据库表中,而无需进行额外的选择来获取最后一个 ID?

例如,如果我的表有这些列,id,url,name 如果 url 包含域名和当前 id 作为查询变量 ex: 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());
  }

【问题讨论】:

标签: php mysql


【解决方案1】:

据我所知,没有“干净”的方法可以找到您要插入的 ID(根据我从您的问题中了解到,这就是您想知道的)。

我认为有两个选项,从丑陋的一个开始:select max(id) from Persons,将其增加一个,并希望没有插入会为您搞砸。就像我说的,它丑陋,而且-不-可靠。

更好的选择是首先使用 url 的虚拟值插入记录,然后使用 mysql_insert_id() 检索刚刚插入的行的 ID。然后使用正确的 url 值更新该记录。

您要求在插入查询之后无需选择查询即可检索 id 的方法,但正如我所说,我认为这是不可能的。

【讨论】:

  • 我认为使用插入触发器可能“完全”可能,但不确定。此外,+1 表示您是第一个真正理解问题的回答者。
  • 好主意。我稍微研究了插入触发器,但不幸的是,对于提问者来说仍然存在问题,第一个答案here 对此进行了很好的解释。省去了提问者深入触发器的麻烦:)
【解决方案2】:

我为此使用mysql_insert_id()。它工作正常。

// pseudo-ish code
$query = "INSERT something .... "
$updated = $db->run_query($query);
$id = mysql_insert_id();

【讨论】:

    【解决方案3】:

    你的桌子应该是这样的

    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();
    

    【讨论】:

      【解决方案4】:

      当前 ID 在 $_GET['id']。您应该在将其插入查询之前对其进行清理:

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

      然后,在查询中使用$id

      【讨论】:

        【解决方案5】:

        如果您在第一个插入和第二个选择周围添加类。然后选择将起作用。

        <?php
        class insert1{
             function inserthere(){
                  ***insert***
             }
        }
        class select1{
             function selecthere(){
                  ***select***
             }
        }
        $a = new insert1;
        $a->inserthere();
        $b = new select1;
        $b->selecthere();
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-14
          • 2014-04-18
          • 2014-12-24
          相关资源
          最近更新 更多