【问题标题】:How to check a mysql table accessible or not via php如何通过php检查可访问或不可访问的mysql表
【发布时间】:2015-10-09 14:49:19
【问题描述】:

我有自托管的网络应用程序,我正在尝试访问information_schema 表,了解如何在某些服务器中禁用它。如何检查它是否可以访问?

【问题讨论】:

  • 谢谢老兄,它成功了
  • 我在下面为其他人发布答案。如果它对您有用,请务必将其标记为正确。谢谢你:)

标签: php mysql database mysql-error-1064


【解决方案1】:

解决此问题的示例解决方案:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>MySQL Connection Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <style type="text/css">
    #wrapper {
        width: 600px;
        margin: 20px auto 0;
        font: 1.2em Verdana, Arial, sans-serif;
    }
    input {
        font-size: 1em;
    }
    #submit {
        padding: 4px 8px;
    }
    </style>
    </head>

    <body>

    <div id="wrapper">

    <?php
        $action = htmlspecialchars($_GET['action'], ENT_QUOTES);
    ?>

    <?php if (!$action) { ?>

        <h1>MySQL connection test</h1>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>?action=test" id="mail" method="post">

        <table cellpadding="2">
            <tr>
                <td>Hostname</td>
                <td><input type="text" name="hostname" id="hostname" value="" size="30" tabindex="1" /></td>
                <td>(usually "localhost")</td>
            </tr>
            <tr>
                <td>Username</td>
                <td><input type="text" name="username" id="username" value="" size="30" tabindex="2" /></td>
                <td></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="text" name="password" id="password" value="" size="30" tabindex="3" /></td>
                <td></td>
            </tr>
            <tr>
                <td>Database</td>
                <td><input type="text" name="database" id="database" value="" size="30" tabindex="4" /></td>
                <td>(optional)</td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" id="submit" value="Test Connection" tabindex="5" /></td>
                <td></td>
            </tr>
        </table>

    </form>

    <?php } ?>

    <?php if ($action == "test") {

    // The variables have not been adequately sanitized to protect against SQL Injection attacks: http://us3.php.net/mysql_real_escape_string

        $hostname = trim($_POST['hostname']);
        $username = trim($_POST['username']);
        $password = trim($_POST['password']);
        $database = trim($_POST['database']);

        $link = mysql_connect("$hostname", "$username", "$password");
            if (!$link) {
                echo "<p>Could not connect to the server '" . $hostname . "'</p>\n";
                echo mysql_error();
            }else{
                echo "<p>Successfully connected to the server '" . $hostname . "'</p>\n";
    //          printf("MySQL client info: %s\n", mysql_get_client_info());
    //          printf("MySQL host info: %s\n", mysql_get_host_info());
    //          printf("MySQL server version: %s\n", mysql_get_server_info());
    //          printf("MySQL protocol version: %s\n", mysql_get_proto_info());
            }
        if ($link && !$database) {
            echo "<p>No database name was given. Available databases:</p>\n";
            $db_list = mysql_list_dbs($link);
            echo "<pre>\n";
            while ($row = mysql_fetch_array($db_list)) {
                echo $row['Database'] . "\n";
            }
            echo "</pre>\n";
        }
        if ($database) {
        $dbcheck = mysql_select_db("$database");
            if (!$dbcheck) {
                echo mysql_error();
            }else{
                echo "<p>Successfully connected to the database '" . $database . "'</p>\n";
                // Check tables
                $sql = "SHOW TABLES FROM `$database`";
                $result = mysql_query($sql);
                if (mysql_num_rows($result) > 0) {
                    echo "<p>Available tables:</p>\n";
                    echo "<pre>\n";
                    while ($row = mysql_fetch_row($result)) {
                        echo "{$row[0]}\n";
                    }
                    echo "</pre>\n";
                } else {
                    echo "<p>The database '" . $database . "' contains no tables.</p>\n";
                    echo mysql_error();
                }
            }
        }
    }
    ?>

    </div><!-- end #wrapper -->
    </body>
    </html>

参考:[https://ardamis.com/2008/05/26/a-php-script-for-testing-a-mysql-database-connection/][1]

【讨论】:

  • 很高兴它对您有所帮助。
  • 谢谢哥们,编码愉快!
【解决方案2】:

运行SHOW DATABASES 并查看information_schema 是否在列表中。

但这应该没关系吧?如果您是自托管,则可以根据需要对其进行配置。

【讨论】:

  • Dude information_schema 与任何数据库无关,因此它不会显示在 show tables 查询中,是的,我需要获取有多少用户可以访问 information_schema
  • 如何配置?
【解决方案3】:

将数据库设置为 information_schema 并从选定的数据库运行查询“显示表”。如果您具有读取权限,那么您将从该数据库中获取所有表。检查所有查询的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多