PHP/MySQL:如何从PHP数据库方法中获取多个值

PHP/MySQL:如何从PHP数据库方法中获取多个值,php,mysql,oop,methods,Php,Mysql,Oop,Methods,很抱歉这个令人难以置信的新手问题,但如果我不问的话,我可以看到自己陷入了糟糕的实践中 我有一个PHP方法,我想返回给定数据库列的所有值,以便将内容放在HTML表单的下拉菜单中。显然,我可以用PHP方法构建整个HTML并将其作为字符串返回,但我认为这是一种非常糟糕的做法 由于PHP方法只能返回一个值,我想我需要多次调用该方法来填充下拉菜单,或者从该方法传递一个数组 对于这个(可能的)常见问题,什么是好的解决方案?谢谢。嗯,数组是一个值,包含大量其他值。因此,只需让您的方法返回一个结果数组 编辑:正

很抱歉这个令人难以置信的新手问题,但如果我不问的话,我可以看到自己陷入了糟糕的实践中

我有一个PHP方法,我想返回给定数据库列的所有值,以便将内容放在HTML表单的下拉菜单中。显然,我可以用PHP方法构建整个HTML并将其作为字符串返回,但我认为这是一种非常糟糕的做法

由于PHP方法只能返回一个值,我想我需要多次调用该方法来填充下拉菜单,或者从该方法传递一个数组


对于这个(可能的)常见问题,什么是好的解决方案?谢谢。

嗯,数组是一个值,包含大量其他值。因此,只需让您的方法返回一个结果数组


编辑:正如Hammerstein指出的,您可以使用对象,但其好坏取决于上下文。非常相似。

嗯,数组是一个值,包含大量其他值。因此,只需让您的方法返回一个结果数组


编辑:正如Hammerstein指出的,您可以使用对象,但其好坏取决于上下文。非常相似。

您可以使用对象作为返回类型。所以,

class MyReturnValue 
{
  public $Value1;
  public $Value2;
}

function getMyValues() 
{
  $results = GetDatabaseValues( ); // Assume this returns an associative array

  $result = new MyReturnValue();
  $result.Value1 = $results["Value1"];
  $result.Value2 = $results["Value2"];
}

然后在代码中,您可以引用$result.Value1等。

您可以使用对象作为返回类型。所以,

class MyReturnValue 
{
  public $Value1;
  public $Value2;
}

function getMyValues() 
{
  $results = GetDatabaseValues( ); // Assume this returns an associative array

  $result = new MyReturnValue();
  $result.Value1 = $results["Value1"];
  $result.Value2 = $results["Value2"];
}

然后在代码中,您可以引用$result.Value1等。

没有PHP函数来执行此操作,因此您必须根据结果形成一个数组

$column = array()
$query = mysql_query("SELECT * FROM table ORDER BY id ASC");
while($row = mysql_fetch_array($query)){
    $column[] = $row[$key]
}
然后将$column传递给视图(HTML)

foreach($column作为$value)
{
回声“
  • ”$value。”
  • ”; }
    没有PHP函数可以执行此操作,因此您必须根据结果形成一个数组

    $column = array()
    $query = mysql_query("SELECT * FROM table ORDER BY id ASC");
    while($row = mysql_fetch_array($query)){
        $column[] = $row[$key]
    }
    
    然后将$column传递给视图(HTML)

    foreach($column作为$value)
    {
    回声“
  • ”$value。”
  • ”; }
    我不太确定我是否完全理解您想要做什么,但是您可以始终将结果从方法传回,然后在HTML中循环

    您的方法类似于:

    public function my_method()
    {
         $result = $db->query($sql_here);
         return $result;
    }
    
    然后你的HTML就会

    <select>
    
    <?
    
        $result = $class->my_method();
    
        while($row = $result->fetch_assoc())
        {
            echo '<option>'.$row['some_col'].'</option>';
        }
    
    ?>
    
    </select>
    

    我不太确定我是否完全理解您想要做什么,但是您可以始终将结果从方法传回,然后在HTML中循环

    您的方法类似于:

    public function my_method()
    {
         $result = $db->query($sql_here);
         return $result;
    }
    
    然后你的HTML就会

    <select>
    
    <?
    
        $result = $class->my_method();
    
        while($row = $result->fetch_assoc())
        {
            echo '<option>'.$row['some_col'].'</option>';
        }
    
    ?>
    
    </select>
    

    您可以在数组中包含数组,因此如果您有一个包含多个列的表,则可以将它们作为单独的数组分配给数组:

    $all_results = array();
    foreach($rowInDatabase as $key => $value){
        // each row will be an array with a key of column name and value of column content depending how you get the data from the DB.
        $colname = $key;
        $colVal = $value; //this is an array
        $all_results[$colname] = $colVal; //append the current row to the array
        }
    
    }
    

    这样的代码将使用表中每行的一个数组填充数组,因此,如果有十行五列,则可以使用$all_results[1][2]获得第2行第3列;(从0开始)

    您可以在数组中包含数组,因此如果您有一个包含多个列的表,您可以将它们作为单独的数组分配给一个数组:

    $all_results = array();
    foreach($rowInDatabase as $key => $value){
        // each row will be an array with a key of column name and value of column content depending how you get the data from the DB.
        $colname = $key;
        $colVal = $value; //this is an array
        $all_results[$colname] = $colVal; //append the current row to the array
        }
    
    }
    


    这样的代码将使用表中每行的一个数组填充数组,因此,如果有十行五列,则可以使用$all_results[1][2]获得第2行第3列;(从0开始)

    当然。没有其他更好的方法了。本·格里菲斯的方法呢?已经编辑了我的答案。但根据上下文,对象和数组一样好。通常数组已经足够了。对不起,我指的是Ben的答案。这是坏习惯吗?@Django Ben的方法是错误的。这是你提到的同样的坏习惯。在uyou开始输出时,应该没有与SQL相关的代码。数组就是你想要的。这就是全部。这不是一个可以讨论的火箭科学。当然。没有其他更好的方法了。本·格里菲斯的方法呢?已经编辑了我的答案。但根据上下文,对象和数组一样好。通常数组已经足够了。对不起,我指的是Ben的答案。这是坏习惯吗?@Django Ben的方法是错误的。这是你提到的同样的坏习惯。在uyou开始输出时,应该没有与SQL相关的代码。数组就是你想要的。这就是全部。这不是一个可以讨论的火箭科学。OP认为这是一个糟糕的做法。你最好在你的代码中避免这个。我不太明白他在问什么。在我听来,他不想在方法内部构建HTML,这就是问题所在。这是真的,Ben。我从来没有明确指出这个解决方案是不好的做法,但上校是对的。。。在您放置SQL的地方不应该有SQL。不过,谢谢。好吧,是我说这是一个糟糕的做法。哈哈,我只是觉得他所指的糟糕做法是在方法内部生成HTML。在这里,使用对象而不是数组到底有什么错?(这是一个真正的问题——不是讽刺)OP认为这是一种不好的做法。你最好在你的代码中避免这个。我不太明白他在问什么。在我听来,他不想在方法内部构建HTML,这就是问题所在。这是真的,Ben。我从来没有明确指出这个解决方案是不好的做法,但上校是对的。。。在您放置SQL的地方不应该有SQL。不过,谢谢。好吧,是我说这是一个糟糕的做法。哈哈,我只是觉得他所指的糟糕做法是在方法内部生成HTML。在这里,使用对象而不是数组到底有什么错?(这是一个真正的问题——不是讽刺)他需要迭代值,不需要方法她需要迭代值,不需要方法尽管你的问题确实很新鲜,而且这个问题确实是一个非常常见的问题,但你的问题中有两个很好的假设使它没有那么糟糕:1。这里1000人中只有一人知道用户定义的方法。其他人认为PHP程序是一个简单的线性实心代码块。2.你的坏习惯评论是绝对正确的。虽然你的问题确实很新,而且这个问题确实很常见,但你的问题中有两个非常好的假设,使它没有那么糟糕