我有一个像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?
}
答案 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没有损坏您的数据库表名称=>价值联想在某种程度上。