php - 如何从表中的自动增量获取值并将其用于另一个表?

标签 php mysql sql

我是 php 和 msq sql 的新手,制作了一个表单来添加到数据库。我有 3 个表,其中有 3 个自动增量,如果可以的话,我会有 5 个。我想知道是否有可能从表并将其应用于另一个表。我有 betaling 和 adresgegevens 增量,我想将其与 klantgegevens 链接,但如果我尝试将表单添加到我的数据库中,我就会得到这个。

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in.

此外,我使用了 3 个 sql 语句,如果我删除第 3 个语句,我可以毫无问题地插入表单,但这不是我想要的。

非常欢迎任何其他解决方案。 这是我的 php 代码

<?php


if(isset($_POST["submit3"])){

$verbinding = new PDO("mysql:host=localhost;port=3307;dbname=ziggo2","root","usbw");

$sql1=" 
INSERT INTO betaling (order_id,rekeningnr,basispakket,voordeel)
 VALUES (:order_id,:rekeningnr,:basispakket,:voordeel);
";       
$statement = $verbinding ->prepare($sql1);
$statement->bindValue(":order_id", '', PDO::PARAM_STR);
$statement->bindValue(":rekeningnr", $_SESSION['rekeningnr'], PDO::PARAM_STR);  
$statement->bindValue(":basispakket", '50', PDO::PARAM_STR);
$statement->bindValue(":voordeel", $_SESSION['voordeel'], PDO::PARAM_STR);
$statement->execute();
$count1 = $statement->rowCount();


$sql2="
INSERT INTO adresgegevens (adres_id,postcode,huisnr,straat,plaats,datum)
VALUES(:adres_id,:postcode,:huisnr,:straat,:plaats,:datum);
";
  $statement = $verbinding ->prepare($sql2);
$statement->bindValue(":adres_id", '', PDO::PARAM_STR);
$statement->bindValue(":postcode", $_SESSION['postcode'], PDO::PARAM_STR);
$statement->bindValue(":huisnr", $_SESSION['huisnr'], PDO::PARAM_STR);
$statement->bindValue(":straat", $_SESSION['straat'], PDO::PARAM_STR);
$statement->bindValue(":plaats", $_SESSION['plaats'], PDO::PARAM_STR);
$statement->bindValue(":datum", '', PDO::PARAM_STR);
$statement->execute();
$count2 = $statement->rowCount();

$sql3=" 
JOIN adresgegevens a on a.adres_id = k.adres_id JOIN klantgegevens k on k.order_id = b.order_id JOIN betaling where klantgegevens k = k.klantnr
INSERT INTO klantgegevens(klantnr,adres_id,order_idgeslacht,voorletters,tussenvoegsel,achternaam,gebdat,e-mail,telnr,producten)
VALUES (:klantnr,:adres_id,:order_id,:geslacht,:voorletters,:tussenvoegsel,:achternaam,:gebdat,:e-mail,:telnr,:producten);
";
$statement = $verbinding ->prepare($sql3);
$statement->bindValue(":klantnr", '', PDO::PARAM_STR);
$statement->bindValue(":adres_id", '' , PDO::PARAM_STR);
$statement->bindValue(":order_id",  '', PDO::PARAM_STR);
$statement->bindValue(":geslacht", $_SESSION['geslacht'], PDO::PARAM_STR);
$statement->bindValue(":voorletters", $_SESSION['voorletters'], PDO::PARAM_STR);
$statement->bindValue(":tussenvoegsel", $_SESSION['tussenvoegsel'], PDO::PARAM_STR);
$statement->bindValue(":achternaam", $_SESSION['achternaam'], PDO::PARAM_STR);
$statement->bindValue(":gebdat", $_SESSION['gebdat'], PDO::PARAM_STR);
$statement->bindValue(":e-mail", $_SESSION['e-mail'], PDO::PARAM_STR);
$statement->bindValue(":telnr", $_SESSION['telnr'], PDO::PARAM_STR);
$statement->bindValue(":producten", $_SESSION['producten'], PDO::PARAM_STR);
$statement->execute();
$count3 = $statement->rowCount();

//  SET @lastid = LAST_INSERT_ID();


if($count1 == 1 AND $count2 == 1 AND $count3 == 1){
 print("Er is $count1 rij succesvol toegevoegd.");
}
 else{
    print("OOps er is wat fout gegaan"); 
 }

//if strlen( $count => 1){
//  print("U heeft" . $count . "regel toegevoegd");
//}

    }
?>

最佳答案

您需要的技巧是 MySQL 函数 LAST_INSERT_ID()

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

这会计算出最近使用的自动增量 ID。

您可以使用查询将其检索到客户端(php)程序中

SELECT LAST_INSERT_ID() AS last_id

函数 PDO::lastInsertId() 是此操作的快捷方式。

您还可以在一系列 INSERT 或 UPDATE 语句中使用它。例如:

INSERT INTO name (surname, given, title) VALUES ( :sur, :giv, :title )
INSERT INTO address (name_id, street, city) VALUES (LAST_INSERT_ID(), :street, :city)

即使在具有许多连接的繁忙数据库上,为什么这仍然有效?因为 MySQL 在每个不同连接的上下文中维护 LAST_INSERT_ID() 的值。

关于php - 如何从表中的自动增量获取值并将其用于另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214593/

相关文章:

php - 我的逻辑正确吗? Ajax 和/或 PHP 与 Mysql

php - mysql 中的 from 子句

mysql - 如何根据另一个表验证字段的唯一性

javascript - 在删除之前使用 JavaScript 进行提示不起作用

php - 基于PHP和MYSQL向多个用户发送邮件

php - Zend框架: how to reset mysite. com/admin/auth密码在mysql中使用phpmyadmin

java - 无法从其他电脑的 phpmyadmin(wamp) 的 mysql 数据库中检索条目

php - SQL 查询结果为字符串(或变量)

sql - 我的表需要进行哪些更改才能在 AppEngine 的 BigTable 上工作?

sql - 每 15 分钟高效地查询一个巨大的时间序列表一行