MYSQLI面向对象,我的脚本怎么了?

时间:2018-11-10 10:06:48

标签: php oop object mysqli

我正在尝试执行查询,看它是否运行良好,但是现在它没有输入IF或ELSE。 我在mysqli程序上安装了它,并且一切正常,现在我正尝试将其更改为面向对象,并且如果不输入,则不会进入内部。

        if(isset($_POST['submit']))
{
    $email = $_POST["email"]; 
    $password = md5($_POST["password"]); 

    $query = "SELECT * FROM Users WHERE Email=? AND Password=?";
    $stmt = $conn->prepare($query);
    $stmt->bind_param('ss', $email,$password);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 1)
    {
            ?>
            <script type="text/javascript">
                alert("INSIDE");
            </script>
        <?php
        $row = $result->fetch_assoc();
        if(isset($_POST['remember']))
        {
            $_SESSION["remember"] = "1"; 
        }
        $_SESSION["username"] = $row['Username'];
        $_SESSION['check'] = "1";
        $_SESSION['ID'] = $id;
        $_SESSION['permission'] = $row['Admin'];
        header("Location: dashboard.php");
        exit;
    } 
    else
    {
        ?>
            <script type="text/javascript">
                alert("Credentials Are Wrong!");
            </script>
        <?php
        exit;
    }
    $stmt->close();
}   

谢谢大家。

2 个答案:

答案 0 :(得分:0)

您应该使用

$stmt->bind_result($col1, $col2 ...);

$result = $stmt->fetch();

以便从查询而不是

访问数据
$conn->query($stmt);

(在https://secure.php.net/manual/en/mysqli-stmt.fetch.php中提供了一个示例)。请注意,要执行此操作,您将需要指定要从数据库中获取的列名,而不是在SQL查询中使用*,并且对于从查询中获取的每个列数据,您都应在fetch()参数,因此,例如,应进行以下操作(请注意,这些参数可能与数据库列的名称不匹配):

$email = $_POST["email"]; 
$password = md5($_POST["password"]); 

$stmt = $conn->prepare("SELECT ID, Name FROM Users WHERE Email=? AND Password=?");
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->bind_result($id, $name);
$stmt->fetch();
$stmt->close();
echo $id . ': ' . $name;

答案 1 :(得分:0)

更新后的答案

您非常亲密。使用$result = $stmt->get_result();而不是$result = $stmt->query;来检查查询是否返回了结果。

$email = $_POST["email"]; 
$password = md5($_POST["password"]);     

$query = "SELECT * FROM Users WHERE Email = ? AND Password = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$result = $stmt->get_result();

if($result->num_rows !== 0){

  if(isset($_POST['remember'])){
    $_SESSION["remember"] = "1"; 
  }

  $_SESSION['check'] = "1";
  $_SESSION['ID'] = $row['ID'];
  header("Location: dashboard.php");
  exit();

}else{

  echo
  '<script type="text/javascript">
    alert("Credentials Are Wrong!");
  </script>';

  exit();

  }

$stmt->close();

正如一些评论中已经提到的那样,请勿将MD5用于密码哈希。 PHP具有自己的内置函数来处理密码。请研究Password_has()Password_verify()。现在而不是以后花时间研究和实施这些方法。这样可以节省您的时间。