2015-04-07 37 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;