【问题标题】:How to solve expects parameter issue with mysqli如何用mysqli解决expects参数问题
【发布时间】:2017-01-17 19:25:46
【问题描述】:

我在script1.php 中收到此错误。

这是我迄今为止尝试过的。下面是我的script1.php 代码,之后它转到welcome.php

<?php
$link = mysqli_connect("localhost", "root", "", "demo");
echo "jay";

// Check connection
if ($link === false)
{
    die("ERROR: Could not connect. " . mysqli_connect_error());
    session_start();
}

$uname1 = ($_POST['username']);
$pass1 = ($_POST['password']);

$sql = "SELECT id FROM persons WHERE usernamesignup = '$uname1' and passwordsignup= '$pass1'";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$active = $row['active'];

$count = mysqli_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if ($count == 1)
{
    echo " jayesh vyas";
    session_register("myusername");
    $_SESSION['login_user'] = $myusername;

    header("location: welcome.php");
} else
{
    $error = "Your Login Name or Password is invalid";
}
?>

welcome.php代码如下:

<?php
include('session.php');
?>
<html">

<head>
    <title>Welcome </title>
</head>

<body>
<h1>Welcome <?php echo $login_session; ?></h1>
<h2><a href="logout.php">Sign Out</a></h2>
</body>

</html>

因此,每当我执行script1.php 时,它都会向我显示一些警告,如下所示:

警告:mysql_fetch_array() 期望参数 1 是资源, 在 C:\xampp\htdocs\LoginRegistrationForm\script1.php 中给出的布尔值 第 17 行

警告:mysqli_num_rows() 期望参数 1 为 mysqli_result, 在 C:\xampp\htdocs\LoginRegistrationForm\script1.php 中给出的布尔值 第 20 行

很高兴了解我做错了什么并解决了这个问题?

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    mysqli_query 将在错误时返回 false,而不是 resource,类似于 mysqli_connect

    失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 将返回一个 mysqli_result 对象。对于其他成功的查询,mysqli_query() 将返回 TRUE

    要解决此问题,请将您的 mysqli_query 包装在 if 条件中以确保没有发生错误,并在您的开发环境中输出错误。

    由于您的查询接受用户输入,我还建议使用准备好的语句,以帮助降低 SQL 注入的风险。

    $sql = 'SELECT `id` FROM `persons` WHERE `usernamesignup` = ? AND `passwordsignup` = ?';
    if (!$stmt = mysqli_prepare($link, $sql)) {
        die(mysqli_error($link));
    }
    mysqli_stmt_bind_param($stmt, 'ss', $uname1, $pass1);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $id);
    mysqli_stmt_fetch($stmt);
    
    echo $id;
    
    mysqli_stmt_close($stmt);
    mysqli_close($link);
    

    附带说明,您还应该将 session_start(); 移出 if ($link === FALSE) 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多