2014-03-04 203 views
2

我有一個設置像這樣::設置PHP變量

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? 

} 
+3

我認爲一個關聯數組在這裏最適合你。 – thatidiotguy

+9

您可以**不**要生成每個值的變量。這太瘋狂了。使用數組。 –

回答

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

正如其他人所指出的,這是非常糟糕的做法,我只提供在脅迫下這種反應並直接回答這個問題!

這是不好的,因爲它有可能覆蓋現有的變量,並且你不能保證某些數據庫沒有以某種方式損壞名稱=>值關聯的數據庫表。

+0

這將做OP的想法。但我不知道這是不是一個好主意;) – Loopo

+0

這是一個不好的做法! – CodeBird

+0

我寧願將未經驗證的'$ _GET'參數放入我的'eval()'和'exec()'中,而不是使用此代碼... –

2

你可以做

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

或者你可以使用一個關聯數組是一個更好的方法做IT

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

這第一條路是不好的做法因爲變量名稱將根據數據庫中的值而變化。有人可能會改變數據庫中的某些東西可能會破壞你的代碼

+0

男人你在開玩笑嗎?!這是一個不好的做法,只要告訴他使用一個數組! – CodeBird

+0

@CodeBird是的,我做了,看到大膽的 – Pattle

+0

使它更大膽:P – CodeBird