在此foreach循环中设置PHP变量

时间:2014-03-04 14:18:19

标签: php sql foreach

我有一个像so ::

这样设置的数据库表
ID | NAME  | VALUE
1  | item1 | item1value
1  | item2 | item2value

依旧......

我想做什么,是在sql查询上,遍历所有行并设置一个变量:

$name = $value

然后应该设置例如2个变量:

$item1 = item1value
$item2 = item2value

我如何在foreach循环中执行此操作?

CONNECTION DETAILS ETC

$dsn        = "mysql:host=$server;dbname=$database";

$db = new PDO($dsn, $username, $password);
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$query = "SELECT * FROM `values`";

try
{ 
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 

$rows = $stmt->fetchAll(); 

foreach($rows as $row){

   // WHAT TO PUT HERE? 

}

2 个答案:

答案 0 :(得分:2)

你可以做到

foreach($rows as $row){
   $$row['name'] = $row['value']
}

或者您可以使用关联数组,这是更好的方式并且

$aResults = array();
foreach($rows as $row){
   $aResults[$row['name']] = $row['value']
}

第一种方法是不良做法,因为变量名称会根据数据库中的值而改变。有人可能会在数据库中更改可能会破坏您的代码的内容

答案 1 :(得分:0)

foreach($rows as $row){
   list( $var, $value) = each( $row);
   $$var = $value;
}

正如其他人所说,这是非常糟糕的做法,我只是在胁迫下提供这个回应,并直接回答这个问题!!

这很糟糕,因为它有可能覆盖现有变量,并且您无法保证某些numpty没有损坏您的数据库表名称=>价值联想在某种程度上。