【问题标题】:A web application to allow the user to type SQL queries允许用户键入 SQL 查询的 Web 应用程序
【发布时间】:2017-10-28 22:57:48
【问题描述】:

我只是想知道,如果可能的话,允许用户从 Web 应用程序中实际输入 SQL 查询的最佳方式。

到目前为止,我有一个非常简单的 Web 应用程序,它允许用户查看数据库表并对其进行操作等等。

我想给他们一个选项,让他们也可以从 Web 应用程序中实际键入查询 (SELECT * FROM).. 然后在表格中显示结果。 (与搜索栏完全一样,但我认为这不会削减它,不是吗?)。

我目前只使用 PHP,我希望仅使用 HTML/PHP 就能实现,还是需要其他语言的帮助?

这对我来说可能太复杂了,但如果有人能给我一个很好的起点,那就太好了。

更新: 根据我的理解来回答我的问题,我需要这样的东西:

<form action= Search.php method="POST">
<input type="text" name="Search">
<input type="submit" name"">

搜索.php

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {

$SEARCH = $_POST['Search'];

if (!isset($_POST)) {

    $sql = "'%".$_POST['$SEARCH']."%'";

    $results = mysqli_query($con, $sql);

            echo "<table border ='2'>";

            if (mysqli_num_rows($results) !=0) {

            while ($row=mysqli_fetch_array($results)) {

            echo "<tr><td></td></tr>";

            }

            echo "</table>";
        }else {
            echo "Failed! Try another search query.";
            }
    }
}



    ?>

此时 in 返回一个错误:

未定义索引:搜索

这是在谈论$SEARCH = $_POST['Search'];

但我认为我正在定义该搜索,因为那是表单中的搜索?

【问题讨论】:

  • 为什么不让他们访问像 phpMyAdmin 这样的东西?
  • @ceejayoz 我完全理解你的意思:) 我知道这是在现实世界中永远不会执行的事情,我很清楚潜在的安全风险,但是我对 php/ 还很陌生sql 和只是想到这一点让我质疑一个人将如何去做,所以如果你愿意,就来一场“玩”吧。
  • 如果您想要比 phpMyAdmin 更简单的东西作为示例/灵感,请查看github.com/vrana/adminer
  • 感谢您的回复.... phpMyAdmin 示例基本上是我正在寻找的,文本框和搜索按钮是字面上的,因此用户可以执行 SQL 语句,就像搜索查询一样。我遇到的困难只是知道我应该在执行脚本中编写什么类型的 SQL 语句,例如: 在搜索语句中有人可以写的位置:$sql = SELECT * FROM user WHERE name LIKE ='%".$_POST['search']."%' 然后他们会返回结果。我需要输入类似:$sql = "'%".$_POST['$SEARCH']."%'";
  • 如果您想让用户进行原始 SQL 查询,只需执行 $sql = $_POST['whatever'];

标签: php html database


【解决方案1】:

听起来您正在构建自己的简约版phpMyAdmin。仅使用 PHP 和 HTML 就完全可以做到。

一个非常基本的实现是带有文本区域的标准 HTML 表单,它提交给执行查询并呈现结果表的 PHP 脚本。如果将结果作为关联数组获取,则可以从第一个结果行的数组键中获取所需的表列标题。

您可能(或者我应该说“将”)遇到用户提供返回数百万个结果的查询的情况。输出所有这些可能会导致浏览器长时间挂起(甚至崩溃),因此您可能需要实现某种分页并将LIMIT 子句附加到查询中。

由于用户自己提供 SQL 查询,他们需要知道自己做错了什么,这样他们也可以自己更正它,因此如果查询失败,您需要从 MySQL 输出文字错误消息。

允许用户提供原始 SQL 查询为许多潜在的滥用场景打开了大门。如果它是我的应用程序,我不希望用户将此功能用于除SELECT 查询之外的任何内容,因此我可能会让用户提供的查询由仅在应用程序上具有SELECT 权限的 MySQL 用户执行数据库,而不是任何其他特权 - 这样任何尝试DROP 表的用户都将无法。

【讨论】:

    【解决方案2】:

    未定义索引:搜索

    此错误只会在 PHP 首次执行时显示,因为它只是在 $_POST 中期待“搜索”。

    $_SERVER['REQUEST_METHOD'] 检查请求方法是否为 POST 它不检查 $_POST 中是否有任何发布数据。 (来源:$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST'

    但该页面是第一次加载,因此 POST 中没有任何内容。

    您可以通过使用“isset()”方法检查页面是否是第一次加载来避免它。

    如果是第一次加载,就忽略php代码的进一步执行,直接显示表单进入查询。

    <?php
    if(isset($_POST['Search']))
    { 
    `// Query execution code`.
    } 
    ?>
    
    <form action= Search.php method="POST">
    <input type="text" name="Search">
    <input type="submit" name"">
    

    所以如果 $_POST 中没有设置搜索索引,它不会执行 php 代码,也不会产生任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多