执行2个mysql查询时的错误处理

时间:2013-09-03 19:50:34

标签: mysql sql

我构建了一个执行两个查询的函数。这两个查询都将数据插入两个单独的表中,这些表与用户的注册相关。 在一个表中,用户名,密码等内容保存在其他表格中,如地址,电话等... 这是功能:

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只有注册用户的部分数据存在危险。 目标是两个查询都成功运行或没有运行。

我如何编写上面的代码,以便我可以实现上述声明?

我希望我足够清楚。

1 个答案:

答案 0 :(得分:1)

使用交易:http://dev.mysql.com/doc/refman/5.0/en/commit.html

BEGIN
... queries ...
COMMIT or ROLLBACK

注意:“或副verca” - 这是不可能的。在这种情况下,第二个查询永远不会被执行。

注2:

  • 什么是$post?好像没用了。
  • 你为什么不使用准备好的陈述?逃避混乱是非常容易出错的。
  • 为什么你有一个程序界面,通过$connection?你应该有了解数据库连接的对象...你有至少3个不同层的混合代码...如果你计划创建一次写一次代码,但是可能不是很好您必须维护数月/年的项目的想法。