Php 正在放置注册时未创建的customerid

Php 正在放置注册时未创建的customerid,php,mysql,Php,Mysql,标题可能很复杂,但我会在这里解释。 因此,基本上当客户注册时,他们会得到一个唯一的客户代码,该代码在数据库中自动递增。但是,在注册时,客户会添加信用卡信息,并且客户代码是卡表中的外键。现在我要做的是将客户代码放入卡表中。是否有可能或是更好的只是要求用户在注册时添加信用卡 我的查询如下所示: <?php $connection = mysql_connect("com-db-02.student-cit.local", "team16", "DbSLzU") or die (mysql_e

标题可能很复杂,但我会在这里解释。 因此,基本上当客户注册时,他们会得到一个唯一的客户代码,该代码在数据库中自动递增。但是,在注册时,客户会添加信用卡信息,并且客户代码是卡表中的外键。现在我要做的是将客户代码放入卡表中。是否有可能或是更好的只是要求用户在注册时添加信用卡

我的查询如下所示:

<?php
$connection = 
mysql_connect("com-db-02.student-cit.local", "team16", "DbSLzU")
or die (mysql_error());


$db = mysql_select_db("team16") or die(mysql_error());

$DepotId = $_POST['depotId'];
$FName = $_POST['custFName'];
$LName = $_POST['custLName'];
$Email = $_POST['custEmail'];
$Address = $_POST['address'];
$Town = $_POST['town'];
$County = $_POST['county'];
$Eircode = $_POST['eircode'];
$Phone = $_POST['phone'];
$Password = $_POST['custPassword'];
$cardtype = $_POST['cardType'];
$cardHolder = $_POST['cardHolder'];
$cardNumber = $_POST['cardnumber'];
$expiryDate = $_POST['expirydate'];
$securitycode = $_POST['securitycode'];
// TO DO OTHER TEXTBOXES

$query1 = "SELECT DEPOTID FROM DEPOT WHERE LOCATION ='$DepotId'";

$result1 = mysql_query($query1);
$depotID = -1;

while($row = mysql_fetch_array($result1))
{
        $depotID = $row['DEPOTID'];
}
$query3 = "INSERT INTO card(customerCode) SELECT customerCode * FROM customer WHERE customerCode= customerCode";
$query = "INSERT INTO CUSTOMER(DEPOTID, CUSTFNAME, CUSTLNAME, CUSTEMAIL, ADDRESS, TOWN, COUNTY, EIRCODE, 
        PHONE, CUSTPASSWORD) VALUES('$depotID','$FName', '$LName', '$Email', '$Address', 
            '$Town', '$County', '$Eircode', '$Phone', '$Password')";

$query2 = "INSERT INTO CARD(CARDTYPE, CARDHOLDER, CARDNUMBER, EXPIRYDATE, SECURITYCODE, CUSTOMERCODE) VALUES('$cardNumber','$cardtype', '$cardHolder', '$expiryDate', '$securitycode')";

/*$result = mysql_query($query);*/
$result = mysql_query($query2);
$result = mysql_query($query3);
echo $query2();
echo $query3();
?>

您可以使用获取上次插入的自动递增值

您应该首先执行
INSERT-INTO-CUSTOMER
语句($query)。之后,您可以立即将卡记录与客户参考一起插入,如下所示:

<?php
$connection = 
mysql_connect("com-db-02.student-cit.local", "team16", "DbSLzU")
or die (mysql_error());


$db = mysql_select_db("team16") or die(mysql_error());

$DepotId = $_POST['depotId'];
$FName = $_POST['custFName'];
$LName = $_POST['custLName'];
$Email = $_POST['custEmail'];
$Address = $_POST['address'];
$Town = $_POST['town'];
$County = $_POST['county'];
$Eircode = $_POST['eircode'];
$Phone = $_POST['phone'];
$Password = $_POST['custPassword'];
$cardtype = $_POST['cardType'];
$cardHolder = $_POST['cardHolder'];
$cardNumber = $_POST['cardnumber'];
$expiryDate = $_POST['expirydate'];
$securitycode = $_POST['securitycode'];
// TO DO OTHER TEXTBOXES

$query1 = "SELECT DEPOTID FROM DEPOT WHERE LOCATION ='$DepotId'";

$result1 = mysql_query($query1);
$depotID = -1;

while($row = mysql_fetch_array($result1))
{
        $depotID = $row['DEPOTID'];
}
$query3 = "INSERT INTO card(customerCode) SELECT customerCode * FROM customer WHERE customerCode= customerCode";
$query = "INSERT INTO CUSTOMER(DEPOTID, CUSTFNAME, CUSTLNAME, CUSTEMAIL, ADDRESS, TOWN, COUNTY, EIRCODE, 
        PHONE, CUSTPASSWORD) VALUES('$depotID','$FName', '$LName', '$Email', '$Address', 
            '$Town', '$County', '$Eircode', '$Phone', '$Password')";

$query2 = "INSERT INTO CARD(CARDTYPE, CARDHOLDER, CARDNUMBER, EXPIRYDATE, SECURITYCODE, CUSTOMERCODE) VALUES('$cardNumber','$cardtype', '$cardHolder', '$expiryDate', '$securitycode')";

/*$result = mysql_query($query);*/
$result = mysql_query($query2);
$result = mysql_query($query3);
echo $query2();
echo $query3();
?>
插入卡中(客户代码、卡类型、持卡人、卡号、过期日期、,
证券代码)
值(最后一次插入ID(),,,,,,,,,?);
问号是在准备好的语句中插入值的占位符。你应该避免使用

此外,它们也被弃用。改用
mysqli\uu
PDO


请注意,在$query3中,您有一个不属于那里的
*
,但无论如何,您不再需要该语句了。在解决方案中,您只需要两个查询,而不是三个查询。第二个用户读取上次插入的客户代码,同时执行卡片插入。

最好在注册过程中让用户输入卡片信息,但使用插入查询时,应该是两个查询。一个用于在表中插入用户,如果插入成功,则获取用户表中最后一行插入的客户ID,然后构建第三个查询,将卡信息插入到其他表中,如用户卡信息@Matuesz首先,您必须在Customers表中输入数据,因为您的业务逻辑是:“Customers OWN/have CARDS(不是CARDS OWN/have users:-)GOT-IT”@Malikas如果我知道您需要进行3次查询,我不明白的是如何从customer表中提取customercode,然后将其放入card表中。您必须获取最后一个\u INSERT\u ID()[这就是它被大写的原因]。很高兴你已经接受了答案,这表明你的问题已经解决了:-)@Mateuszso我在查询或$result之后直接输入了“INSERT-INTO-CARD…”?另外,您在卡中有两次customercode,对吗?是的,您可以执行(1)
INSERT-INTO-CUSTOMER
,然后(2)
INSERT-INTO-card
,使用特殊功能
LAST\u INSERT\u ID()
。我删除了重复字段。感谢您指出这一点,我没有注意到您已经有了它,我盲目地复制了它。出于某种原因,我得到了致命错误,它说:致命错误:调用未定义的函数INSERT-INTO-CARD(CARDNUMBER、CUSTOMERCODE、CARDTYPE、持卡人、EXPIRYDATE、SECURITYCODE,)value('02158',LAST_INSERT_ID,'Amex',jack jack jack',11/01/2019 033')()在结束括号前有一个尾随逗号:
SECURITYCODE,)
,在语句末尾有一些尾随括号
()
。。。。在
LAST\u INSERT\u ID
之后没有必要的括号。应该是
LAST\u INSERT\u ID()
。该问题已得到回答。为了您自己的利益,请确保远离mysql_uu函数,因为它们不再维护。同时停止在SQL语句中插入字符串。这是不安全的。您不会后悔使用PDO或mysqli编写语句。用正确的方法做。