2015-05-09 47 views
0

您好,所以我有一个表,名为tblcontactlist,并有5列(使用ContactID名称,联系人姓名,contactEmail,contactNumber,hashed_id),这是我工作的查询PDO lastInsertId在同一个查询

$query = "INSERT INTO tblcontactlist (contactName, contactEmail, contactNumber) VALUES (:cname, :cea, :cnum)"; 
     $stmt = $dbc->prepare($query); 
     $stmt->bindParam(':cname', $contactName); 
     $stmt->bindParam(':cea', $emailAdd); 
     $stmt->bindParam(':cnum', $contactNumber); 
     $stmt->execute(); 

     $last_id = $dbc->lastInsertId('contactID'); 
     $hashed_id = sha1($last_id); 

$query2 = "UPDATE tblcontactlist SET hashed_id=:hid WHERE contactID=:cid"; 
     $stmt2 = $dbc->prepare($query2); 
     $stmt2->bindParam(':hid', $hashed_id); 
     $stmt2->bindParam(':cid', $last_id); 
     $stmt2->execute(); 

这是什么基本上没有被插入新记录,然后使用hashed_id列上的散列ID更新最新插入的记录。有没有适当的方法来做到这一点?我的意思是代码更短或代码更好。谢谢!

+0

手段旁边插入要转换它更新?或插入后,你想获得最后插入的ID,然后做一些更新的东西? –

+0

插入记录时,hashed_id也会更新并插入,而不执行更新查询。那可能吗? – FewFlyBy

+0

不能理解抱歉。通过在代码中评论来指出你的问题。 –

回答

1

lastInsertId前提是你有一个以前的INSERT事先,你没有。在这种情况下,lastInsertId是最大contactID。所以我会执行一个查询来获取并散列最大contactID,然后执行一个插入查询(并且不更新)。

//fetch Max contactID 
    $res=$dbc->prepare("SELECT MAX(contactID) FROM tblcontactlist");  
    $res->execute();   
    $fetchMax=$res->fetch(PDO::FETCH_NUM); 

    $last_id=$fetchMax[0]; 
//hash the max contactID 
    $hashed_id = sha1($last_id); 
    //for reusability you can create a function with the above code. 

现在执行插入查询:

$query = "INSERT INTO tblcontactlist (contactName, contactEmail, contactNumber, hashed_id) VALUES (:cname, :cea, :cnum, :hid)";    
      $stmt = $dbc->prepare($query);  
      $stmt->bindParam(':cname', $contactName); 
      $stmt->bindParam(':cea', $emailAdd); 
      $stmt->bindParam(':cnum', $contactNumber); 
      $stmt->bindParam(':hid', $hashed_id); 
      $stmt->execute(); 

是更好的吗?

+1

感谢您的帮助,但我已经使用更新查询。和你的行$ res-> execute($ params);应该是$ res-> execute();只有:D – FewFlyBy

+0

谢谢,正确。我已经在我的核心类系统上使用绑定参数实现了maxid函数,所以我有一个参数数组的$参数。 –

+0

再次感谢主席:) – FewFlyBy