以下函数顾名思义,将注册表中的数据注册/记录到数据库中。为了避免表地址获取错误的adressID(引用成员(memberID)),我必须使用autocommit和commit分别将两个插入查询包装到成员和地址中。
function register($un, $fname, $lname, $email, $pwd, $phone, $street, $city, $country, $postal, $state )
{
$this->conn->autocommit(FALSE);
$query_insert_members = "INSERT INTO members(fname, lname, uname, email, phone, password, joinDate) VALUES('".$fname."', '".
$lname."', '".$un."', '".$email."', '".$phone."', '".md5($pwd)."', NOW())";
$registerquery_members = $this->conn->query($query_insert_members);
$last_id = $this->conn->insert_id;
$query_insert_addresses = "INSERT INTO addresses(addressID, street, city, state, country, zip) VALUES('".$last_id."', '".
$street."', '".$city."', '".$state."', '".$country."', '".$postal."')";
$registerquery_addresses = $this->conn->query($query_insert_addresses);
if($this->conn->commit)
{
return true;
}
else
{
$affectd_rows = $this->conn->num_rows;
return $affectd_rows.$this->conn->error;
$this->conn->rollback();
}
}
它似乎没有提交任何内容,也没有返回任何错误消息。我只收到一条空白信息。
答案 0 :(得分:1)
您访问属性“commit”,而不是调用函数“commit()”。
您没有收到错误的原因是因为$ this-> conn->在if语句中提交将有效地检查$ this-> conn对象中是否存在提交属性,该属性的计算结果为false。然后执行else分支,在那里只返回与错误字符串连接的受影响的行,无论如何都可以正常工作。返回后调用回滚将永远不会执行btw。