mysqli php安全登录脚本出错

时间:2013-11-20 23:55:12

标签: php login mysqli

我搜索了谷歌,阅读了PHP手册并尝试了几个教程,为mysqli和PHP制作了一个安全的登录脚本。有没有人知道没有md5实际有效的那个?

如果可能,我想看一些工作代码或教程。

即使将值硬编码到脚本中,我也不会实际查询数据库或返回值...我正在寻找类似的东西:

  • 使用'connectdb'文件进行连接
  • 从表单
  • 发布user / pwd
  • 查询db for user / pwd
  • 使用用户名
  • 设置会话

这是我的代码不起作用:

<?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();
?>

我收到以下错误消息:

2 个答案:

答案 0 :(得分:2)

根据PHP documentation for mysqlibind_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