我搜索了谷歌,阅读了PHP手册并尝试了几个教程,为mysqli和PHP制作了一个安全的登录脚本。有没有人知道没有md5
实际有效的那个?
如果可能,我想看一些工作代码或教程。
即使将值硬编码到脚本中,我也不会实际查询数据库或返回值...我正在寻找类似的东西:
这是我的代码不起作用:
<?php
include ("conectionlink.php");
//connection errors if any...
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$userid = htmlentities($_POST['userid'], ENT_QUOTES);
$password = htmlentities($_POST['password'], ENT_QUOTES);
//create a prepared statement
if ($stmt = $mysqli->prepare("SELECT userid, password FROM admins WHERE userid=? and password=?")) {
// bind parameters-define them...
$stmt->bind_param("is", $userid, $password);
//execute...
$stmt->execute();
// bind result variables
$stmt->bind_result($userid,$password)
//fetch value
$stmt->fetch();
var_dump($userid, $password);
printf("%n is associated with %s", $userid, $password);
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
我收到以下错误消息:
答案 0 :(得分:2)
根据PHP documentation for mysqli,bind_result()
语法应该在一行中,而不是执行多个绑定:
bind_result ( mixed &$var1 [, mixed &$... ] )
所以,而不是:
$stmt->bind_result($userid);
$stmt->bind_result($password);
尝试这样做:
$stmt->bind_result($userid,$password);
答案 1 :(得分:0)
当我怀疑你确实收到一个字符串时,你似乎将userid
列视为包含一个整数。您可以像这样初始化$userid
:
$userid = htmlentities($_POST['userid'], ENT_QUOTES);
然后您在SELECT
中使用它并将其视为bind_param()
来电中的整数。所以,你把它当作一个整数(在$_POST
变量中似乎不太可能) - 我希望你真的收到一个字符串用户名,而不是整数ID。
您对printf()
的来电也遇到问题 - %n
不是公认的格式。您可以在sprintf()
manual page找到可接受的格式。
简而言之,我怀疑您在SELECT
语句中使用了错误的列,并且它实际上应该是username
。