【问题标题】:"No database selected" issue“未选择数据库”问题
【发布时间】:2013-12-26 17:44:01
【问题描述】:

我的开发环境基于 Windows XP SP3 上的 EasyPHP 12 和 PHPdesigner。 我正在研究注册/登录解决方案,并且我使用一个非常基本的脚本成功地完成了它的“注册”部分,该脚本曾经可以正常工作。出于某种原因,我不得不切换机器,当我将所有相关文件复制回我的第一个工作站时,我收到了“未选择数据库”消息。我已经尝试了一切来解决这个问题,包括创建一个到目前为止只有一个表(用户)的全新数据库。 我的连接文件(db_connection.php)如下:

DEFINE ('DB_USER', 'superuser'); 
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'hf_databank');

// Make the connection:

$db_connect = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

// Check connection
   if (mysqli_connect_errno($db_connect))                        {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }

// Let us select the database (just in case you want to change it): 

    $db_select = mysqli_select_db ($db_connect, DB_NAME) OR die;

它似乎工作正常。

然后,回到我的 index.php 文件,看起来以下验证行正在创建我无法修复的问题:

include_once '../includes/db_connection.php';
include_once '../includes/functions.php';

$action = array();
$action['result'] = null;
$text = array();


//check if the form has been submitted

if(isset($_POST['signup'])){

//cleanup the variables  and prevent mysql injection (this uses the function "clean" defined in functions.php file)

    $username = clean($_POST['username']);
    $password = clean($_POST['password']);
    $email = clean($_POST['email']);


    //Validation 1: Let’s say the user submits the form without a username. Our statement is going to run the 
    //code below. 
if(empty($username)){ $action['result'] = 'error'; array_push($text,'Please set a  valid username'); }
if(empty($password)){ $action['result'] = 'error'; array_push($text,'Please define a password'); }
if(empty($email)){ $action['result'] = 'error'; array_push($text,'Please set a valid email address'); } 




     $query = mysql_query("SELECT * FROM `users` WHERE username = '$username' OR email = '$email'") or die (mysql_error()); // mySQL Query    
        $row = mysql_num_rows($query); // Checks to see if anything is in the db.


       if ($row > 0) { 
            $action['result'] = 'error'; array_push($text,'existing username/email; 
            }

脚本似乎停留在“$query”步骤,我在该步骤中收到错误消息。

我尝试了几种方法来查明问题,但仍然无法理解问题出在哪里。我也能够毫无问题地连接到数据库(hf_databank),数据库结构看起来不错。任何帮助将非常感激 !

【问题讨论】:

  • 你使用的是mysql_query而不是mysqli_query,使用mysqli*版本试试
  • 你在哪里创建的数据库?你有没有设置任何用户名和密码?尽快告诉我。
  • 你在其中一个中有mysqli,在另一个中有可怕的mysql_query。为什么不在两者中都使用mysqli?看到像 clean 这样的函数非常令人担忧,因为它们几乎没有被正确实现。
  • @Asraful:是的,我已经设置了与本地 MySQl 服务器的连接,它工作得很好(用户名:超级用户,密码:密码)......正如我所说,我完全能够连接到数据库使用这些凭据并操作记录...由于某种原因,当我尝试从 PHP 运行 mysql_query 时,它显示“未选择数据库”:(
  • @tadman: 是的,我知道 mysql_ 和 msqli_ 表单的问题,我会更改这些,但我认为这不是我的数据库选择问题的原因(因为完全相同的脚本几周前工作正常...)...无论如何,我会更新代码,但是您还看到其他错误吗?关于“清洁”功能,我很欣赏您的评论,但我试图暂时将其排除在外,我得到了同样的错误:(

标签: php mysql sql database registration


【解决方案1】:

在第二部分你使用 mysql_ 并连接你使用 mysqli_

也为您的查询使用 mysqli_

$query = mysqli_query($db_connect,"SELECT * FROM `users` WHERE username = '$username' OR email = '$email'") or die (mysqli_error()); // mySQL Query    
        $row = mysqli_num_rows($query);

【讨论】:

  • 请使用占位符。否则,您将面临 SQL 注入错误的严重风险。
  • @user2997718:我已将所有内容切换到 mysqli_* 仍然弹出相同的错误:(
  • 抱歉拼错 $dbconnect 现在改成 $db_connect
【解决方案2】:

如果它在您以前的机器上正常工作,那么我认为这个解决方案可以帮助您选择数据库。 一步一步检查信息一步一步

【讨论】:

  • 这看起来很有趣...但我在这里看不到链接...您能帮忙吗?谢谢:)
  • 哪里看不到链接请解释一下!
  • 请将新标签页中的图片拖放至可见!或者先保存图片看看
  • 你是完全正确的......图像实际上已经不言自明,但我无法清楚地看到箭头......我很抱歉,非常感谢你花时间制作所有这些给我!
【解决方案3】:

替换脚本中使用的所有mysql_*,并将其替换为mysqli_*

例如:

$query = mysqli_query($db_connect, "SELECT * FROM `users` WHERE username = '$username' OR email = '$email'"");

我建议您使用 MySQLi 类进行连接。它使编码更容易!尤其是通过使用占位符 (?) secure。欲了解更多信息,请访问PHP.net - Prepared Statements in MySQLi

而且,mysql_* 已被弃用。所以,最好放弃使用它们的旧做法!

【讨论】:

  • 好的!我修复了它,虽然我不确定是什么造成的。但是我做了两件事:\
  • 1) 我已将整个脚本从 mysql_* 切换到 mysqli_* 格式
  • 2) 我已将超级用户重新添加到“新”机器中的数据库中,授予完全权限并在此之后刷新所有内容!谢谢大家的大力支持和建议...从现在开始不再有 mysql_* 版本:)
  • @Diego 干得好! :) 我最近切换到 PDO。有空的时候可以看看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2017-11-03
  • 2014-04-09
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多