【问题标题】:PHP/MySQL: How to get multiple values from a PHP database methodPHP/MySQL:如何从 PHP 数据库方法中获取多个值
【发布时间】:2012-03-10 20:07:47
【问题描述】:

对于这个令人难以置信的新手问题,我深表歉意,但如果我不问,我会发现自己陷入了不良习惯。

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

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

什么是解决这个(大概)常见问题的好方法?谢谢。

【问题讨论】:

  • 虽然您的问题确实很新奇,而且问题确实很常见,但您的问题中有 2 个绝妙的假设使它还不错: 1. 这里 1000 人中只有一个人知道用户- 定义的方法。其他人认为 PHP 程序是一个简单的线性实体代码块。 2.您的不良做法言论绝对正确。

标签: php mysql oop methods


【解决方案1】:

嗯,数组是一个值,包含大量其他值。所以只要让你的方法返回一个结果数组。

编辑:正如 Hammerstein 指出的那样,您可以使用对象,但它与数组一样好/坏,具体取决于上下文。非常相似。

【讨论】:

  • 当然。这是没有其他/更好的方法。
  • Ben Griffith 的方法怎么样?
  • 已经编辑了我的答案。但是根据上下文,对象将与数组一样好。通常数组就足够了。
  • 对不起,我指的是本的回答。这是不好的做法吗?
  • @Django Ben 的方法是错误的。这与您提到的不良做法相同。 uyou 开始输出时应该没有 SQL 相关代码。 ARRAY 是您所要求的。就这样。讨论这不是一门火箭科学。
【解决方案2】:

你可以使用一个对象作为你的返回类型。所以;

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 等

【讨论】:

  • 他需要迭代值,不需要方法
【解决方案3】:

没有 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 as $value)
{
   echo "<li>" . $value . "</li>";
}

【讨论】:

  • 如果您将此代码包装在一个函数中,您的答案是最好的。
  • 只是一项谨慎的工作 - 将结果集加载到数组中然后处理它对于少量记录来说很好,但是当您处理大量记录时,您最终会遍历结果集以构建数组,消耗宝贵的内存,然后遍历数组以构建 html。不过,该方法对于像列表框这样的小卷确实非常有效 - 只是我的 2p 价值..
  • 是的,这几乎就是我所做的,除了我正在尝试使用 PDO。
【解决方案4】:

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

$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
    }

}

这样的代码将在您的数组中填充表格的每行一个数组,因此如果有 10 行和 5 列,您可以使用 $all_results[1][2]; 获得第 2 行第 3 列; (因为它们从 0 开始)。

【讨论】:

    【解决方案5】:

    不太确定我完全理解你想要做什么,但你总是可以从方法传回结果,然后在你的 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>
    

    【讨论】:

    • OP 将其称为不良做法。你最好在你的代码中避免它。
    • 我不太明白他在问什么。在我看来,他不想在方法中构造 HTML,这就是问题所在。
    • 这是真的,本。我从来没有明确说过这个解决方案是不好的做法,但是 Col. 是对的......你放的地方不应该有 SQL。不过,谢谢。
    • 好吧,是我说这是一种不好的做法。
    • 大声笑,我只是认为他所指的不好的做法是在方法中生成 HTML。当您在这里时 - 使用对象而不是数组有什么问题? (这是一个真正的问题 - 不是讽刺)
    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多