PHP/MySQL:如何从PHP数据库方法中获取多个值
很抱歉这个令人难以置信的新手问题,但如果我不问的话,我可以看到自己陷入了糟糕的实践中 我有一个PHP方法,我想返回给定数据库列的所有值,以便将内容放在HTML表单的下拉菜单中。显然,我可以用PHP方法构建整个HTML并将其作为字符串返回,但我认为这是一种非常糟糕的做法 由于PHP方法只能返回一个值,我想我需要多次调用该方法来填充下拉菜单,或者从该方法传递一个数组PHP/MySQL:如何从PHP数据库方法中获取多个值,php,mysql,oop,methods,Php,Mysql,Oop,Methods,很抱歉这个令人难以置信的新手问题,但如果我不问的话,我可以看到自己陷入了糟糕的实践中 我有一个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.你的坏习惯评论是绝对正确的。虽然你的问题确实很新,而且这个问题确实很常见,但你的问题中有两个非常好的假设,使它没有那么糟糕