在我的网页上登录管理员。我正在关注一个有点老的教程,我正在尝试为MYSQLI更新它。在他的视频中,一切都很完美..对我而言..
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = md5($_POST['password']);
if(empty($username) or empty($password)) {
echo "<p class='warn'>Oops!</p>";
} else {
$checklogin = mysqli_query(" SELECT id FROM admins WHERE username='$username' AND password='password' ");
if(mysqli_num_rows($checklogin) == 1){
echo "You can log in.";
} else {
echo "Oops";
}
}
}
和
Warning: mysqli_query() expects at least 2 parameters, 1 given in /opt/lampp/htdocs/WEBSITES/Site1/admin/login.php on line 29
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /opt/lampp/htdocs/WEBSITES/Site1/admin/login.php on line 31
答案 0 :(得分:3)
有关错误参数的错误通常可以通过查找相关功能的手册来解决。
在这种情况下,请转到http://php.net/mysqli_query,您将看到此功能摘要:
混合mysqli_query(mysqli $ link,字符串$ query [,int $ resultmode = MYSQLI_STORE_RESULT])
因此,期望的两个参数是mysqli
对象,表示与数据库的连接(第一次连接时将获得),然后是要运行的SQL字符串(您当前正在传递)。 / p>
第二个错误是第一个错误的结果:因为您没有检查错误,$checklogin
并不代表成功的查询结果。
顺便提一下,如果教程没有继续解释,你可能还想在这里看一些其他问题:
empty($password)
,但已经应用了散列函数,该函数永远不会返回空字符串答案 1 :(得分:1)
您对mysqli_query()
的调用要求第一个参数是您与数据库的连接,该参数将在mysqli_connect()
期间返回。这是你的第一个警告。
由于您没有提供与mysqli_query()
的关联,$checkLogin
的返回值等于null
,这是您的第二个警告的来源。mysqli_num_rows()
期望结果从成功的查询中设置。
以下是您的修复:
$connection = mysqli_connect("host", "user", "pass", "yourDB");
$result = mysqli_query($connection, "SELECT some, fields FROM YourTable WHERE something = 'this'");