建议的问题并没有完全涵盖我的问题。我对这里的答案很感兴趣,Invalid argument supplied for foreach!但是我并不完全明白它是如何应用的。
我有以下代码,它可以像我期望的那样工作;该代码通过匹配从上一页发布的隐藏表单提供的ID来构建电子邮件地址数组,查找电子邮件' mysql数据库中的列。
但是,我也收到错误:Invalid argument supplied for foreach() on line 50
任何帮助表示感谢。
function findEmail($id) {
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
if ($mysqli->connect_errno) {
error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
return false;
}
$query = "SELECT email FROM `Students` WHERE id = '$id'";
$result = $mysqli->query($query);
while($row = $result->fetch_array()) {
$rows[] = $row;
}
$email = "";
foreach($rows as $row) { //This is line 50
$email = ($row['email']);
}
return $email;
}
$userId = array();
$userEmail = array();
foreach($_POST as $key => $value) {
array_push($userId, $value);
array_push($userEmail, findEmail($value));
}
答案 0 :(得分:0)
错误不是致命的,你可以使它成为...但是错误是没有定义$ rows - 你的查询必须返回空。
答案 1 :(得分:0)
你可能在$ rows数组中有一个NULL元素,如果var_dump($ rows)你有NULLS吗?
答案 2 :(得分:0)
你需要初始化可变$行,否则如http://www.php.net/manual/en/control-structures.foreach.php所述,foreach"当你尝试在具有不同数据类型或未初始化变量的变量上使用它时会发出错误&# 34;
所以在第50行之前提出这个:
$rows=null;
答案 3 :(得分:0)
这个功能可以这样做:
function findEmail($id) {
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
if ($mysqli->connect_errno) {
error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
return false;
}
$query = "SELECT email FROM `Students` WHERE id = '$id'";
$result = $mysqli->query($query);
$row = $result->fetch_array($query);
return $row[0];
}
答案 4 :(得分:0)
"提交"的价值被送到了这个职能部门。添加下面的第二行解决了这个问题。
foreach($_POST as $key => $value) {
if($key == "submit") continue;
array_push($userId, $value);
array_push($userEmail, findEmail($value));
}