从一个表单(mysql和PHP)插入多个表

从一个表单(mysql和PHP)插入多个表,php,mysql,insert,transactions,Php,Mysql,Insert,Transactions,我是这个网站的新手,所以如果你遇到一些新手的错误,请对我宽容一些 我有一个表单,它在提交时将数据插入两个单独的表(用户、用户和地址)。用户地址应通过用户ID链接回用户 我已经看到了几种不同的方法可以用来解决这类问题(没有哪种方法可以奏效),但我正在寻求帮助,看看哪种方法是最好的 这就是我到目前为止所做的: public function createNewUser($details, $active) { $password = $details["password"]; $

我是这个网站的新手,所以如果你遇到一些新手的错误,请对我宽容一些

我有一个表单,它在提交时将数据插入两个单独的表(用户、用户和地址)。用户地址应通过用户ID链接回用户

我已经看到了几种不同的方法可以用来解决这类问题(没有哪种方法可以奏效),但我正在寻求帮助,看看哪种方法是最好的

这就是我到目前为止所做的:

public function createNewUser($details, $active) 
{
    $password  = $details["password"];
    $username  = strtolower($details["username" ]);
    $firstname = strtolower($details["firstname"]);
    $lastname  = strtolower($details["lastname" ]);
    $email     = strtolower($details["email"    ]);
    $sex       = strtolower($details["sex"      ]);
    $datepicker  = strtolower($details["datepicker" ]);
    $disabled  = ($active) ? "0" : "1";
    $address1     = strtolower($details["address1"    ]);
    $address2     = strtolower($details["address2"    ]);
    $province     = strtolower($details["province"    ]);
    $city     = strtolower($details["city"    ]);
    $district     = strtolower($details["district"    ]);
    $zipcode     = strtolower($details["zipcode"    ]);


    $

    $sql       = "INSERT INTO users VALUES (NULL, LOWER('$username'), MD5('$password'), LOWER('$firstname'), LOWER('$lastname'), LOWER('$email'), LOWER('$sex'), LOWER('$datepicker'), 0, NOW(), $disabled, 0)";

    $resultSet = $this->db->query($sql);
    return $this->db->getInsertId();

    $sql      = "INSERT INTO users_addresses VALUES (NULL, LOWER('$userid'), LOWER('$address1'), LOWER('$address2'), LOWER('$province'), LOWER('$city'), LOWER('$district), LOWER('$zipcode')";
    $resultSet = $this->db->query($sql);
    return $this->db->getInsertId();
 }

您的代码有很多错误/奇怪之处:

  • 不要将变量直接放入SQL代码中,而是使用
  • 您正在对所有数据调用
    strtolower
    LOWER
    。不需要做两次
  • 第二个查询永远不会完成,因为您在它前面返回了
    。这就是“无法访问的代码”
  • 修复方法可能是将第一个
    return$this->db->getInsertId()
    替换为
    $userid=$this->db->getInsertId()
    ,第二个替换为
    return$userid


    祝您好运,欢迎使用SO。

    第二个查询永远不会执行,因为在所有条件下都会执行返回语句。即使纠正了这一点,第二个查询中的$user_id也并没有用从第一个查询中获得的值填充。解决方案如下:

    首先

    应该由

    $user_id=$this->db->getInsertId();
    
    return $user_id
    
    第二

    应该由

    $user_id=$this->db->getInsertId();
    
    return $user_id
    

    你很想用小写字母表示值。首先在PHP中使用
    strtolower
    ,然后在MySQL查询中使用
    LOWER()
    。奇怪。尽可能低lol:D