Php : 变量未传输到 foreach
Php : variable not transmitted into a foreach
这里可能是一个愚蠢的问题,我很抱歉...
我有一个 SQL 请求到 foreach,如下所示。
"auth" 字符串定义正确,"echo $auth" return 就是我想要的。但是 sql 请求 return 什么都没有。
// $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];
}
我的目标是 select $val 数组中包含的 sql 字段(它在我项目的其他部分中完美运行)。提前致谢。
我也试过了,还是不行 return :
$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];
My goal is to select the sql fieds contained in the $val
array
因此 $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 实例正常工作...请注意我们处于调试模式,所以我的第一个代码当然没有优化...
问题是 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;
这里可能是一个愚蠢的问题,我很抱歉...
我有一个 SQL 请求到 foreach,如下所示。 "auth" 字符串定义正确,"echo $auth" return 就是我想要的。但是 sql 请求 return 什么都没有。
// $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];
}
我的目标是 select $val 数组中包含的 sql 字段(它在我项目的其他部分中完美运行)。提前致谢。
我也试过了,还是不行 return :
$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];
My goal is to select the sql fieds contained in the
$val
array
因此 $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 实例正常工作...请注意我们处于调试模式,所以我的第一个代码当然没有优化...
问题是 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;