2015-04-07 63 views
-1

在這裏可能是一個愚蠢的問題,我很抱歉...PHP:變量沒有傳輸到foreach

我有一個SQL請求到一個foreach,像下面。 正確定義「auth」字符串,「echo $ auth」返回我想要的內容。但是sql請求不會返回任何內容。

// $auth=something; 
$val=array(value1,value2,value3); 

    foreach ($val as $j) 
     { 
     $req = mysqli_fetch_array(mysqli_query($link,"select val from user where auth='$auth'")); 
     $$j=$req[val]; 
     } 

我的目標是選擇包含在$ VAL數組中的SQL fieds(它完美的作品在我的項目的其他部分)。提前致謝。

我也試過了,仍然不返回任何東西:

$val = array('mail','preferences','info','langue'); // This must be an array 
    $fields = explode(",", $val); 

    $req = mysqli_fetch_array(mysqli_query($link,"select $fields from user where auth='$auth'")); 

    $mail = $req[0]; $preferences = $req[1]; $info = $req[2]; $info = $req[3]; 
+0

你真正想要做什麼.. –

+0

我編輯的問題,給你更多的相關信息。提前致謝。 –

+0

可能的錯字:'$$ j = $ req [val];'? – DNReNTi

回答

2

我的目標是選擇包含$val陣列中的SQL fieds

所以$val包含的字段你希望在您的查詢中使用。您可以使用explode()檢索所有領域沒有foreach

$fields = explode(",", $val); 

$req = mysqli_fetch_array(mysqli_query($link,"select $fields from user where auth='$auth'")); 

而且你可以得到價值:

$value1 = $req[$val[0]]; // First field 
+0

是的,沒錯。問題解決了嗎? –

+0

我覺得不幸(你可以在我的問題中看到添加的代碼) –

+0

如果你在你的代碼中編寫'$ fields = explode(「,」,mail,preferences,info,langue);'這是一個錯誤。你必須這樣做:'$ val = array('mail','preferences','info','langue'); $ fields = explode(「,」,$ val);'正如我寫的。 –

0

好吧,讓我們恢復了這一切。所以我們有兩種方法。第一:

$val=array(mail,preferences,info,langue); 

    foreach ($val as $j) 
     { 
     $auth = $_SESSION['auth']; 
     echo $auth; //this works 
     $req = "select val from user where auth='$auth'";//this works only in phpMyadmin 
     $req = mysqli_fetch_array(mysqli_query($link,$req)); 
     $$j=$req[val]; 
     } 
    echo $mail; //gives nothing of course... 

而這裏的第二個:

val = array('mail','preferences','info','langue'); 
$fields = explode(",", $val); 
$req = mysqli_fetch_array(mysqli_query($link,"select $fields from user where auth='$auth'")); 
$mail = $req[$val[0]]; $preferences = $req[$val[1]]; $info = $req[$val[2]]; $info = $req[$val[3]]; 

仍然沒有什麼作品。沒有檢測到PHP的問題,我的Mysqli實例工作正常...請注意我們處於調試模式,所以我的第一個代碼沒有優化,當然...

+0

我添加了一個簡短的解釋的答案。請看看它,讓我知道如果你有任何問題。 – msfoster

+0

對不起,它也不起作用...反正,你有關於上面給出的第一個代碼的任何想法?仍然不起作用...這沒有意義... –

+0

你想做什麼?你想選擇數組'$ val'中的列,對嗎?那麼你想把返回的行分配給它的各個變量,對嗎? – msfoster

0

問題是使用explode它分割字符串一個分隔符並創建一個數組。你已經有了一個數組,但是你想讓它成爲一個字符串。要做到這一點,你可以使用implode

$columns = array("mail", "preferences", "info", "language"); 
$sql = sprintf("SELECT %s FROM user WHERE auth='%s'", implode(",", $columns), $auth); 

$query = mysqli_query($sql); //..fetch possible errors 
$row = mysqli_fetch_array($query); //..make sure a row was returned 
list($mail, $preferences, $info, $language) = $row; 
echo $mail;