警告:为foreach()提供的参数无效 - > MySQL连接

时间:2015-09-28 13:39:51

标签: php mysql pdo foreach

我的foreach有问题...你能帮我解决这个问题吗?谢谢你:)

(将登录)

警告:第33行为foreach()提供的参数无效

        if(isset($_POST["UserName"]) AND isset($_POST["Password"])){
        $UserName = $_POST["UserName"];
        $Password = $_POST["Password"];
        $Password = hash("SHA256", $_POST["Password"]);


            $sql = "SELECT UserName FROM Login WHERE UserName=$UserName";
    foreach($db->query($sql) as $data) {
                if ( $_POST['UserName'] == $data["UserName"] && $_POST['Password'] == $data["Password"] ){
                    header("Location: index.php");
        }else{
        $cnt = 1;
      }
     }      
                if(!empty($cnt)){
        echo "Špatné jméno nebo heslo!";
      }


                if(!isset($UserName)){
                        $_SESSION["Time"] = 36000; 
            $_SESSION["LogedIn"] = 1;

    }      
                }   

        }
  }
  }

1 个答案:

答案 0 :(得分:0)

Warning: Invalid argument supplied for foreach()表示query()失败并且未返回数组。

有一些错误,使用准备好的语句,在查询时放入原始值,文本/字符串类型需要引号,在查询中返回密码不仅是用户名,如果不是名为password的键永远不会定义返回阵列。

正确的代码

$sql = "SELECT UserName, Password FROM Login WHERE UserName = ?";
$stmt = $db->prepared($sql);
if(!$stmt->execute(array($UserName)){
   print_r($stmt->errorInfo());
   exit;
}

$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($items as $data) {