MySQL 没有连接到数据库

Posted

技术标签:

【中文标题】MySQL 没有连接到数据库【英文标题】:MySQL doesn't connect to the database 【发布时间】:2016-02-22 03:51:55 【问题描述】:

我正在我的电脑上的 LAMP 下测试本地登录数据库页面。即使我可以从终端连接到 mysql,我也不能从 php 脚本中这样做。我已经在网上到处查看了,但无论我走到哪里,它都只是以下代码的一种或另一种变体

<!DOCTYPE html5>
<html>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <link rel="stylesheet" type="text/css" href="style.css">
    <head>
    </head>
    <body>

    <?php

    $username = $_POST['username'];
    $password = $_POST['password'];

    /* connect to the db */
    $connection = mysql_connect('localhost', 'username', 'password') or die ("Connect error");
    mysql_select_db('myDatabase',$connection);
    /* show tables */
    $res = mysql_query("SHOW DATABASES", $connection) or die ("No Show Database");
    while ($row = mysql_fetch_row($res))
    
        echo $row[0], '<br/>';
    

    ?>

    </body>
</html>

还有另一个页面需要用户名和密码,然后通过 POST 方法将其传递到此页面,但此页面立即显示连接错误。我尝试使用 if else 而不是 or die 但仍然无法连接。

【问题讨论】:

or die ("Connect error"); 对您没有帮助。 or die(mysql_error()) 将,or die ("No Show Database"); 相同 Your script is at risk for SQL Injection Attacks. 如果可以的话,你应该stop using mysql_* functions。 These extensions 已在 PHP 7 中删除。了解PDO 和 MySQLi 的 prepared 语句并考虑使用 PDO,it's really not hard。 也使用php.net/manual/en/function.error-reporting.php 这里的目标是什么?使用 POST 数组/变量并充当数据库连接的参数? 【参考方案1】:

您必须将变量传递给连接函数并显示有意义的错误描述:

$username = $_POST['username'];
$password = $_POST['password'];

/* connect to the db */
$connection = mysql_connect('localhost', $username, $password) or die(mysql_error());

Your script is at risk for SQL Injection Attacks. 如果可以的话,你应该stop using mysql_* functions。 These extensions 已在 PHP 7 中删除。了解 prepared 的 PDO 和 MySQLi 语句并考虑使用 PDO,it's really not hard。

虽然您真的不想以这种方式连接到您的数据库,但它留下了太多的机会。当你使用密码时,你真的应该使用 PHP 的built-in functions 来处理密码安全。如果您使用的 PHP 版本低于 5.5,则可以使用 password_hash() compatibility pack。

【讨论】:

不干净的变量传递到数据库函数@vp_arth。我正试图在通行证上阻止它。 如果你是关于user/pass - 它的意思是接收不干净的变量(原样)。但是,如果您要查询,那么没有任何连接的show databases 怎么会有 sql 注入的风险? 他没有将它们传递给SHOW DATABASES; OP 正在将它们传递给mysql_connect(),并且那里没有可能进行 SQL 注入。我只是提醒OP。这不是“是否”的问题,而是 OP“何时”将用户数据发送到他们的数据库的问题。 嗯,好吧)我只是想,可能是在mysql_connect 中发现了新的漏洞,说密码很长......也许你知道,我不知道 :) @JayBlanchard 我看你一直都是对的 Sam。我认为你已经从商店拿回了你的水晶球,而且都打磨得很漂亮,我可以补充一下 ;-)

以上是关于MySQL 没有连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章

Mysql连接到没有任何数据库的服务器

连接网站显示数据库错误:无法连接到数据库:无法连接到MySQL?

在没有xml的spring boot中连接到mysql数据源

使用 Node.js 从 AWS Lambda 函数连接到 MySql 数据库,没有连接回调

远程连接到 MySQL 数据库 [重复]

使用 DSN ODBC 2 连接到 ONLINE MySQL 数据库