PHP - 带有SQL查询的构造函数

TT4*_*M.C -2 php mysql oop constructor

选项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']);
Run Code Online (Sandbox Code Playgroud)

选项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 ...
}
Run Code Online (Sandbox Code Playgroud)

笔记

我完全清楚这mysql_query是不赞成的.请抵制压倒性的冲动告诉我,并与我的PM联系.

我问的是,选项2是不好的做法还是在面向对象的空间中有任何预见的困境.这对我来说似乎是更清洁的选择.

Rap*_*nha 5

向负责的人显示此信息. 在此输入图像描述


但无论如何回到你的问题.

尽管我不喜欢这样回答,我认为选项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;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

在您的其他文件上,您可以执行此操作

<?php
$value1 = 1;

$o = new SomeName;
$results = $o->fetchResults($value1);
Run Code Online (Sandbox Code Playgroud)