我该如何改进这段代码

时间:2010-12-08 06:22:36

标签: php oop error-handling

我已在我的用户类中添加了此功能。

  • 此功能位于用户类中是否正确。
  • 我应该如何处理此函数中的数据库查询错误。
  • 或者我可以使用任何数据库类来执行有用的查询。
  • 应该返回函数的调用。

请帮助。谢谢

    function adduser() {

        // Storing data in database
         $sql = "INSERT INTO users  (   alias,  firstname,  lastname,   PASSWORD,email  )
            VALUES  (   '$this->alias',     '$this->firstname',     '$this->lastname',  AES_ENCRYPT('$this->password','text'),'$this->email'    );";
        $result = mysql_query($sql);

        $this->userid=mysql_insert_id();

        //make profile card in cards table...
        $sql="INSERT INTO cards ( userid_from,  userid_to,  eventid,    gibid, 
            card_type,  message ,status,isDeck) VALUES  (   '$this->userid',    '$this->userid',    'eventid',  '$spaceid',     'V', '','A','Y' )"  ;   
        @mysql_query($sql);     
        $id_card=mysql_insert_id(); 

        $systemgibid=systemgibid();
        //make system gib card in cards table...
        $sql="INSERT INTO cards ( userid_from,  userid_to,  eventid,    gibid, 
            card_type,  message ,status,isDeck) VALUES  (   '',     '$this->userid',    'eventid',  '$systemgibid',     'A', '','A','N' )"  ;   
        @mysql_query($sql);     


        $this->firstname=$this->firstname."\'s Gib";
        //create gibs define in connection.php type D for default gib
        creategib($this->firstname,'D',$this->userid);


    }

4 个答案:

答案 0 :(得分:3)

您可以做的最大事情是使用预准备语句保护您的SQL。现在,您很容易受到经典SQL注入漏洞的攻击。<​​/ p>

有关预备陈述的更多信息: http://php.net/manual/en/pdo.prepared-statements.php

如果您不想使用PDO,请至少使用mysql_real_escape_string

答案 1 :(得分:0)

此功能位于用户类中是否正确。 是

我应该如何处理此函数中的数据库查询错误。 使用try {} catch(){},如果出现错误则抛出异常

或者我可以使用任何数据库类来执行有用的查询。 将PDO用于数据库查询

它应该返回函数的调用。 boolean true成功,失败时抛出异常记录异常并返回false

答案 2 :(得分:0)

三件事:

  1. 停止,请停止使用'@'来抑制错误。使用异常处理。
  2. 尝试使用PDO或使用mysql_real_escape_string
  3. 转义查询参数
  4. 让所有查询都从一个类完成。它会将您的异常处理案例(如第1点所述)保存在一个地方。

答案 3 :(得分:0)

HI 每当你得到时,使用try {} catch thing ans set error message。而不是在异常中抓住它。而不是全部显示。