Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何删除绑定结果上的此mysqli警告?_Php_Mysql_Database_Mysqli - Fatal编程技术网

Php 如何删除绑定结果上的此mysqli警告?

Php 如何删除绑定结果上的此mysqli警告?,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,我在错误报告中收到一个mysqli警告,声明警告:mysqli_stmt::bind_result()[mysqli stmt.bind result]:绑定变量的数量与。。。在第36行是否有人知道如何正确绑定结果以消除此警告?我真的不知道问题出在哪里,但是说到使用mysqli,我是一个初学者 代码如下: <?php // PHP code session_start(); //connected to db // required variables (make the

我在错误报告中收到一个mysqli警告,声明
警告:mysqli_stmt::bind_result()[mysqli stmt.bind result]:绑定变量的数量与。。。在第36行
是否有人知道如何正确绑定结果以消除此警告?我真的不知道问题出在哪里,但是说到使用mysqli,我是一个初学者

代码如下:

<?php
  // PHP code
  session_start(); 

//connected to db

  // required variables (make them explciit no need for foreach loop)
  $teacherusername = (isset($_POST['teacherusername'])) ? $_POST['teacherusername'] : '';
  $teacherpassword = (isset($_POST['teacherpassword'])) ? $_POST['teacherpassword'] : '';
  $loggedIn = false;

  if (isset($_POST['submit'])) {

    $teacherpassword = md5(md5("j3Jf92".$teacherpassword."D203djS"));  

    // don't use $mysqli->prepare here
    $query = "SELECT * FROM Teacher WHERE TeacherUsername = ? AND TeacherPassword = ? LIMIT 1";
    // prepare query
    $stmt=$mysqli->prepare($query);
    // You only need to call bind_param once
    $stmt->bind_param("ss",$teacherusername,$teacherpassword);
    // execute query
    $stmt->execute(); 
    // get result and assign variables (prefix with db)
    $stmt->bind_result($dbTeacherForename,$dbTeacherSurname,$dbTeacherUsername,$dbTeacherPassword);

    while($stmt->fetch()) {
      if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
        $loggedIn = true;
      }
    }

    if ($loggedIn == true){
      // left your session code as is - but think wisely about using
      $_SESSION['teacherforename'] = $dbTeacherForename;
      $_SESSION['teachersurname'] = $dbTeacherSurname;
      header( 'Location: menu.php' ) ;
      die();
    }

       /* close statement */
    $stmt->close();

    /* close connection */
    $mysqli->close();
  }
?>

不建议使用通配符*。表中可能有更多的列,而不仅仅是您需要的4列

我会和你一起去

SELECT TeacherForname, TeacherSurname, TeacherUsername, TeacherPassword FROM Teacher WHERE TeacherUsername = ? AND TeacherPassword = ? LIMIT 1

发生此错误的原因是您要求mysqli将
x
列绑定到
y
变量,其中
x!=y
Teacher
表中有多少列?

密码不是以纯文本形式存储的
$teacherpassword=md5(md5(“j3Jf92”。$teacherpassword。“D203djS”)
@Quentin没有帮助,但不建议使用MD5来存储密码。@Matt要安全地存储密码,使用MD5的最佳方法是什么?@user1517628共有8列,但我已删除通配符,只将字段名作为Leon Kramer包含在内mentioned@user1517628这就是为什么。您试图将8列绑定到4个变量,这是不允许的。新手犯了错误,没什么大不了的。安全密码q/a有帮助吗?在阅读您链接到的文章时,如果我仍然使用md5,但能够使用此php代码create
$salt=”“,我可以问您一些关于salt密码的问题吗;对于($i=0;$i<40;$i++){$salt.=substr(./abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789),mt_rand(0,63),1);
每次随机生成salt。这会使它更安全吗?如果安全,我如何将随机盐生成器包含到
$teacherpassword=md5(md5(“$teacherpassword”)。如果你知道?@user1517628老实说,我只是浏览了一下答案。我还没有实现这些功能(目前还没有实现任何需要密码存储的功能)。对不起:-/