Php:未传输到foreach的变量

Php:未传输到foreach的变量,php,string,foreach,Php,String,Foreach,也许这是个愚蠢的问题,我道歉 我有一个进入foreach的SQL请求,如下所示。 “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 use

也许这是个愚蠢的问题,我道歉

我有一个进入foreach的SQL请求,如下所示。 “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字段(它在我的项目的其他部分中非常有效)。提前谢谢

我也试过了,仍然没有返回任何内容:

    $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];
我的目标是选择
$val
数组中包含的sql字段

因此,
$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

好吧,让我们继续这一切。所以我们有两种方法。第一:

   $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实例工作正常。。。请注意,我们处于调试模式,因此我的第一个代码当然没有优化…

问题是使用了
分解
,它在分隔符上拆分字符串并创建数组。您已经有一个数组,但希望将其设置为字符串。为此,可以使用
内爆

$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;

你真正想做什么我编辑了这个问题,给你更多的信息。提前感谢。可能的输入错误:
$$j=$req[val]?运行查询三次似乎没有意义。您只是将非常相同的结果值分配给三个变量。或者,
$j
是否在任何地方使用?这是完整的密码吗?那么,
$auth
的确切值是多少?同时启用错误报告。您至少应该得到一个未定义的常量notice.DNReNTi:这部分工作正常,它立即以$field的形式返回变量。对我更有帮助。mario:$j没有在其他任何地方使用,这是相当完整的代码(当然,前面有mysqli实例),var_dump$auth返回一个字符串,所以这是正确的。。。我将打开错误报告…如果您编写
$fields=explode(“,”,mail,preferences,info,langue),我认为这并不不幸(您可以在我的问题中看到添加的代码)在您的代码中,这是一个错误。您必须执行以下操作:
$val=array('mail','preferences','info','langue')$字段=分解(“,”,$val)和我写的一模一样。是的,我确实尝试了所有可能的引号配置。。。仍然不起作用,很抱歉…您是否尝试打印sql查询并直接在mysql上运行它?我添加了一个答案,并做了简短的解释。请看一下,如果您有任何问题,请告诉我。很抱歉,它也不起作用。。。不管怎样,你知道上面给出的第一个代码吗?还是不行。。。这没有道理…你想做什么?您想选择数组中的列
$val
,对吗?然后您想将返回的行分配到其各自的变量中,对吗?是的。但无论如何,我通过选择所有行解决了问题。。。没有效率,但我们可以考虑问题解决了…无论如何谢谢你。。。