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

时间:2013-08-23 10:35:37

标签: php mysql insert transactions

我是这个网站的新手和编码所以如果你遇到一些新手的错误,请放轻松。

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

我已经看到了几种可以用于此类问题的方法(并且没有IC可以使用),但我正在寻求帮助,看看哪种方法最好。

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

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

2 个答案:

答案 0 :(得分:0)

你的代码有些不对劲/奇怪:

  1. 不要将变量直接放在SQL代码中,而是使用prepared statements
  2. 您正在调用所有数据strtolowerLOWER。无需两次。
  3. 第二个查询永远不会完成,因为您之前是return。这是“无法访问的代码”。
  4. 修复可能是将第一个return $this->db->getInsertId()替换为$userid = $this->db->getInsertId(),将第二个替换为return $userid

    祝你好运,欢迎来到SO。

答案 1 :(得分:0)

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

第一

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

应替换为

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

第二

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

应替换为

return $user_id