我是这个网站和编码的新手,所以如果你遇到一些新手错误,请对我宽容一点。
我有一个表单,当提交时,它会将数据插入两个独立的表(users,users_ddresss)中。用户地址应通过用户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();
}
第二个查询永远不会执行,因为在所有条件下执行之前都有一个返回语句。即使更正了这一点,第二个查询中的$user_id也没有用从第一个查询中获得的值填充。解决方案如下:
第一个
return $this->db->getInsertId();
应该被取代
$user_id=$this->db->getInsertId();
第二个
return $this->db->getInsertId();
应该被取代
return $user_id
您的代码有一些错误/奇怪的地方:
- 不要将变量直接放在SQL代码中,而是使用准备好的语句
- 您正在对所有数据调用
strtolower
和LOWER
。不需要做两次 - 第二个查询永远不会完成,因为你在它之前
return
。那是"不可访问的代码"
修复可能是通过用$userid = $this->db->getInsertId()
替换第一个return $this->db->getInsertId()
和用return $userid
替换第二个来完成的。
祝你好运,欢迎来到SO.