我构建了一个执行两个查询的函数。这两个查询都将数据插入两个单独的表中,这些表与用户的注册相关。 在一个表中,用户名,密码等内容保存在其他表格中,如地址,电话等... 这是功能:
function register_biz_user($post,$connection)
{
$name=$connection-> real_escape_string($_POST['name']);
$lastname= $connection->real_escape_string($_POST['lastname']);
$pass_hashed = password::hash($_POST['password']);
$passwd= $connection->real_escape_string($pass_hashed);
$buztype= $connection->real_escape_string($_POST['buztype']);
$usertype= $connection->real_escape_string($_POST['usertype']);
$address= $connection->real_escape_string($_POST['address']);
$city= $connection->real_escape_string($_POST['city']);
$municipality= $connection->real_escape_string($_POST['municipality']);
$url= $connection->real_escape_string($_POST['wwwaddress']);
$email= $connection->real_escape_string($_POST['e-mail']);
$phone= $connection->real_escape_string($_POST['phone']);
$hash =$connection->real_escape_string(md5( rand(0,1000) )) ;
$connection->set_charset("utf8");
$result1 = $connection->query("insert into users values
(NULL,'" .$name. "','" .$lastname . "','".$email."','". $passwd."','".
$hash."','". $usertype."')");
if (!$result1) {
throw new Exception('error');
return false;
}
else{$result2=$connection->query("insert into business_users values
('".$connection->insert_id."','" .$address."','".$url ."','".$phone.
"','".$city. "','".$municipality. "','".$buztype. "')");
}
if(!$result2)
{ throw new Exception('error');
return false;}
返回true; }
这是我的问题: 如果您查看代码,您可能会注意到第一个查询运行没有问题,第二个查询引发异常或反verca。
我的观点是,db只有注册用户的部分数据存在危险。 目标是两个查询都成功运行或没有运行。
我如何编写上面的代码,以便我可以实现上述声明?
我希望我足够清楚。
答案 0 :(得分:1)
使用交易:http://dev.mysql.com/doc/refman/5.0/en/commit.html
BEGIN
... queries ...
COMMIT or ROLLBACK
注意:“或副verca” - 这是不可能的。在这种情况下,第二个查询永远不会被执行。
注2:
$post
?好像没用了。$connection
?你应该有了解数据库连接的对象...你有至少3个不同层的混合代码...如果你计划创建一次写一次代码,但是可能不是很好您必须维护数月/年的项目的想法。