Php 如何删除绑定结果上的此mysqli警告?
我在错误报告中收到一个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_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老实说,我只是浏览了一下答案。我还没有实现这些功能(目前还没有实现任何需要密码存储的功能)。对不起:-/