1

我尝试连接到数据库连接到数据库成功但是当我尝试将用户信息与数据库匹配时它给我一个错误没有选择数据库我尝试使用不同的方法连接到数据库但没有任何效果

<?php
//CREATING CONNECTION TO DATABASE
$con= new mysqli("localhost", "****", "***", "*****");
$con->select_db("lel_server_user_db_secured");
if(mysqli_connect_errno())
    {
        echo "Problem With connection to database Please contact administrator regarding this error";
    }
/* RETURNS NAME OF DEFAULT DATABASE
if ($result = $con->query("SELECT DATABASE()")) {
    $row = $result->fetch_row();
    printf("Default database is %s.\n", $row[0]);
    $result->close();
}
*/
/*
$host="localhost";
$db_user="sky.xpert";
$db_pass="havefun344";
$database="lel_server_user_db_secured";
mysqli_connect($host,$db_user,$db_pass,$database) or die ("Failed to connect");
mysqli_select_db($database) ;
*/

session_start();

//GATHERING DATA FROM USER FORM
$email=$_POST["login"];
$pass=$_POST["pwd"];

//COMMANDING WHERE TO FIND MATCH FOR LGOIN INFORMATION
$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$query=mysql_query($veryfy) or die ( mysql_error() );

$match=0;
$match=mysql_num_rows($query);

//IF MATCH FOUND THEN SETTING SESSION AND REDIRECTING IT TO LOGGED PAGE
if($match==1)
    {
        $_SESSION['loggedin'] = "true";
        header ("Location: logged.php"); //REDIRECTING USER TO ITS HOMEPAGE
    }
else //IF MATCH NOT FOUND THEN REDIRECTING IT BACK TO LOGIN PAGE
    {
        $_SESSION['loggedin'] = "false";
        header ("Location: index.php");
    }
//PERSONAL COMMENTS OR DETIALED COMMENTS
//PROBLEM WITH THIS SCRIPT GIVING OUTPUT ON LOGIN "NO DATABASE SELECTED"
//REFRENCE from http://www.dreamincode.net/forums/topic/52783-basic-login-script-with-php/

?>
4

4 回答 4

2

您正在使用 初始化与数据库的连接mysqli。然后你尝试用mysql. 显然,通过该库与数据库没有连接,因此它失败并出现错误。更改mysql_querymysqli_query

一般说明

您当前的代码容易受到 sql 注入攻击,因为您在将用户输入放入查询之前没有对其进行清理。考虑使用准备好的查询

于 2013-09-22T05:48:11.917 回答
0

数据库lel_server_user_db_secured可能不存在。

内容到您的 mysql:

 mysql -hlocalhost -uusername -p

然后输入您的密码。登录后,输入命令:

show databases;

检查是否lel_server_user_db_secured在结果中。

更新1*

更改以下代码:

$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$query=mysql_query($veryfy) or die ( mysql_error() );

$match=0;
$match=mysql_num_rows($query);

至:

$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$result = mysqli_query($con, $veryfy) or die ( mysqli_connect_errno() );

$match=0;
$match=mysqli_num_rows($result);
var_dump($match);
于 2013-09-22T05:45:08.167 回答
-1

在程序的前半部分,您使用了mysqli,在后半部分使用了mysql。使用mysqlimysql。我建议在你的整个程序中使用mysqli,这样你就不会受到 SQL 注入的攻击

于 2013-09-22T05:49:48.737 回答
-2

你可以简单地做到这一点

$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

没必要$con->select_db("lel_server_user_db_secured");再做

并且使用 mysqli 并不意味着您的代码是安全的......您的代码仍然容易受到 SQL 注入的影响使用准备好的语句代替或至少mysqli_real_escape_string

您需要正确转义所有请求

并且您的数据库可能不存在,因此请先检查它是否存在

并且您正在混合两种不同的 API

您不能将MySQLi函数与MySQL_*函数一起使用

于 2013-09-22T05:47:15.237 回答