【问题标题】:PHP: could not find databasePHP:找不到数据库
【发布时间】:2015-04-20 14:50:03
【问题描述】:

我在将我的数据库连接到 mysql 时遇到困难,我尝试了许多不同的方法来尝试让它连接到我的数据库,但这些方法似乎都不起作用。我只是 php 的新手,我可能会遗漏一些东西,但我不知道它是什么。 这是一个搜索引擎,我创建了表单。 我认为我的问题来自这行代码 mysql_connect("localhost", "root", "") 或 die("could not connect");?! 我想知道是否可以告诉我是什么问题以及如何解决它,非常感谢。 下面是我的代码。

<?php
//connect


mysql_connect("localhost", "root", "") or die("could not connect");
mysql_select_db("search") or die("could not find database");

$output = '';

if (isset($_POST['search'])) {
    $searchq = $_POST['search'];
    $searchq = preg_replace("#[^0-9a-z]#i","", $searchq);


   $query = mysql_query("SELECT * FROM  gp management system WHERE Title LIKE '%$searchq%' OR Description LIKE '%$searchq%' OR Keyword LIKE '%$searchq%'") or die("could not search");
   $count = mysql_num_rows($query);
   if($count == 0) {
       $output = 'There was no search results!';
   }
   else{
        while($row = mysql_fetch_array($query)) {
            $Title = $row['Title'];
            $Description = $row['Description'];
            $Keyword = $row['Keyword'];

            $output .= '<div> ' .$Keyword. ' </div> ';
        }
   }
}

?>

【问题讨论】:

  • 一方面,这是一个问题FROM gp management system 和一个主要问题。
  • 你确定你有一个名为search的数据库吗?
  • 您好,这是我的数据库名称有空格而不是单引号。非常感谢您的反馈,非常棒。
  • 警告:如果您只是学习 PHP,请不要学习过时的 mysql_query 接口。这很糟糕,并且在 PHP 的未来版本中被删除。像PDO is not hard to learn 这样的现代替代品。像PHP The Right Way 这样的指南可以帮助解释最佳实践。始终绝对确定您的用户参数是properly escaped,否则您将遇到严重的SQL injection bugs
  • 那不是包含空格的数据库,而是您的表。

标签: php mysql database


【解决方案1】:

SQL 错误:

SELECT * FROM  gp management system WHERE Title...
               ^^-- table name
                  ^^^^^^^^^^ aliasing 'gp' as 'management'
                             ^^^^^^-- extra unknown garbage

表名不应以空格开头,但如果您坚持使用它们,则需要正确引用:

SELECT * FROM `gp management system` etc...
              ^--------------------^

永远不要输出固定/无用的“无法搜索”错误。让数据库告诉你出了什么问题:

$result = mysql_query($sql) or die(mysql_error());
                           ^^^^^^^^^^^^^^^^^^^^^^^

【讨论】:

  • 非常感谢您的反馈,我只是新手,我正在做一些愚蠢的事情,谢谢,它现在可以工作了!
  • @Ruairi92 您可以在 MarcB 的答案旁边打勾,将其标记为您的问题的答案。请这样做,以便有类似问题的其他人可以找到他的答案。干杯
【解决方案2】:

作为你唯一的新手,你真的应该停止使用 mysql_ 并更改为 mysqli_ 或(我的偏好)PDO()。您标题中的消息似乎来自您的 selectdb 行,因此您实际上连接到数据库很好,只是无法找到您尝试使用的架构(即“搜索”不作为架构存在您的数据库环境中的名称)。除非这不是您得到的错误,在这种情况下,它是您实际 SQL 查询中的一个缺陷。当您尝试运行脚本时,如果没有准确说明您在屏幕上返回的内容,则无济于事。

【讨论】:

  • 非常感谢您的反馈,我真的很感激。
【解决方案3】:

我宁愿像很久以前那样做,见下文:

function db_connect($host, $username, $passwd, $db_name) {
    $db = mysql_connect($host, $username, $passwd);

    if (!$db) {
        echo "Login to database failed: ";
        echo mysql_error();
        return false;
    }

    $result=mysql_select_db($db_name); //Select the database

    if (!$result) {
        echo "Cannot find the database: ".$db_name;
        echo mysql_error();
        return false;
    }

    return $db; //Database descriptor
}

但是你 shouldnt 依赖旧的 MYSQL 扩展,但使用 MYSQLi

编辑:正如@tadman 指出的那样,mysql_connect 调用前面有一个@ 符号,但是有一个用于检查的 if 语句和一个对错误输出的调用。

【讨论】:

  • 添加@ 来添加错误抑制在这里几乎没有任何帮助。
【解决方案4】:

正如其他人所说,您的代码有些混乱 - 您似乎是编程新手,而不仅仅是 PHP。但是每个人都必须从某个地方开始,所以....

您可能想先了解一下how to ask questions - 特别是您已经包含了很多与您所询问的问题无关的代码 - 这是关于连接到 MySQL 的。 OTOH,您省略了许多重要信息,例如正在运行的操作系统以及您尝试了哪些诊断。请参阅here 以获得更好的信息(尽管远非典型示例)。

请仔细阅读您的问题 - 标题暗示 mysql_select_db() 存在问题,而在内容正文中您说您认为问题出在 mysql_connect() 上。如果您提供了脚本的实际输出,我们就可以自己判断了。

您应该检查 MySQL 是否确实在运行 - 具体操作方式取决于您的操作系统。您应该尝试使用不同的客户端进行连接(mysql 命令行客户端、sqldeveloper、Tora、PHPMyAdmin....有很多可供选择)。

您还应该检查(同样这是特定于操作系统的)您的 MySQL 实例是否在您的 php.ini 中配置的相同端口上运行(或在您的 mysql_connect() 调用中被覆盖)。

MySQL treats 'localhost' 与 Unix/Linux 系统上的 127.0.0.1 不同。如果这适用于您,请尝试使用 127.0.0.1 代替 localhost。

or die("无法连接");

无助于诊断问题。如果你……

or die(mysql_error());

你会得到更有意义的回应。

顺便说一句:虽然使用 mysql 扩展而不是 mysqli 或 PDO 编写代码是可以原谅的,但看到似乎没有真正安全的医疗信息管理,我有些担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多