代码之家  ›  专栏  ›  技术社区  ›  ma77c

PHP-带SQL查询的构造函数[关闭]

  •  -1
  • ma77c  · 技术社区  · 6 年前

    选项1: 首先查询数据,然后将数据传递给构造函数

    选项2: 使用构造函数查询数据,然后填充属性


    选项1示例

    $val1 = 1;
    $query = mysql_query("SELECT val2, val3, val4 FROM table WHERE val1 = '".$val1."'");
    $row = mysql_fetch_assoc($query);
    $o = new Class($row['val1'], $row['val2'], $row['val3'], $row['val4']);
    

    选项2示例

    $val1 = 1;
    $o = new Class($val1);
    
    // in Class constructor
    public function __construct($val1) {
        $query = mysql_query("SELECT val2, val3, val4 FROM table WHERE val1 = '".$val1."'");
        $row = mysql_fetch_assoc($query);
        $this->val1 = $row['val1'];
        $this->val2 = $row['val2'];
        // etc ...
    }
    

    注释

    我非常清楚 mysql_query 已弃用。请不要急于告诉我。这些是项目的需求。

    我想问的是,选项2是否是一种糟糕的做法,或者是否存在任何在面向对象领域中众所周知的可预见困境。对我来说,这似乎是一个更干净的选择。

    2 回复  |  直到 3 年前
        1
  •  6
  •   Martin Asuquo12    6 年前

    把这个给负责人看。 enter image description here


    但无论如何回到你的问题上来。

    虽然我不喜欢这样回答,但我认为选项2肯定会让代码更干净,但您也可以通过在类中创建一个返回所需内容的方法来让代码更干净。

    <?php
    
    class SomeName extends DBClass
    {
        // No need for the construct in this case
    
        public function fetchResults($val)
        {
            $notSoDirtyVal = mysql_real_escape_string($val);
    
            $query = "SELECT val2, val3, val4 FROM table WHERE val1 = '".$notSoDirtyVal."'"// Make sure you escape, sanitize, and clean this!!!!!
    
            $stmt = mysql_query($query); 
    
            $results = mysql_fetch_assoc($query);
    
            return $results;
        }
    }
    ?>
    

    然后在另一个文件上执行此操作

    <?php
    $value1 = 1;
    
    $o = new SomeName;
    $results = $o->fetchResults($value1);
    
        2
  •  0
  •   Matthew Goulart    6 年前

    好你有比把你的查询放在哪里更大的问题,但是。。。

    我认为选项1是最好的,因为您可以在其他地方用数据实例化该类 来自DB。

    换句话说,该类不受DB的限制。