我收到执行功能错误

时间:2017-02-03 10:42:32

标签: php mysqli

<?php 
include 'dbconnect.php';
 ob_start();
 session_start();


 $username = "";
 $password = "";

 if(isset($_POST['submit'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    }


 $sql= 'SELECT * FROM login WHERE username=:username AND password=:password';

 $query = $link->prepare($sql);

 $query->execute(array(':username' => $username, ':password' => $password));


 if(mysqli_num_rows($query)== 0){
  header('Location: index.php?err=1');
 }else{

  $row = mysqli_fetch_assoc($query);

  session_regenerate_id();
  $_SESSION['sess_user_id'] = $row['id'];
  $_SESSION['sess_username'] = $row['username'];
  $_SESSION['sess_userrole'] = $row['role'];

  echo $_SESSION['sess_userrole'];
  session_write_close();

  if( $_SESSION['sess_userrole'] == "admin"){
   header('Location: admin.php');
  }else{
   header('Location: user.php');
  }

  }

?>

我收到此错误可能我知道我在哪里出错只是为了更好地学习&#34;在boolean&#34;上调用成员函数execute()帮助我找到更好的解决方案 数据库连接并且还形成输入用户名和密码正确也以下语句正确需要帮助这个查询执行部分

3 个答案:

答案 0 :(得分:0)

$query = $link->prepare($sql);
当你尝试在&#34; false&#34;上运行对象函数时,

返回false而不是对象。它失败了。

$query = $link->prepare($sql);
if ($query instanceof {whatever object type it has to be})
{
     $query->execute(array(':username' => $username, ':password' => $password));
     // rest of your code
}else{
     throw new \Exception("query builder failed");
}

答案 1 :(得分:0)

来自docs

  

如果数据库服务器成功准备了语句,   PDO :: prepare()返回一个PDOStatement对象。如果是数据库服务器   无法成功准备语句,PDO :: prepare()返回   FALSE或发出PDOException(取决于错误处理)。

由于尝试在execute上调用boolean,这意味着prepare返回FALSE,因此声明未成功准备。您需要检查查询的正确性。你的桌子和田地是否存在?如果您使用usernamepassword的任意值运行此类查询,是否会成功执行?猜测:您可能会遇到password问题,这也是一个关键字,您可能希望在查询中使用密码而不是password

答案 2 :(得分:0)

在dbconnect.php

中尝试使用它
    $link = new PDO('mysql:host=localhost;dbname=task', 'root', '');