【问题标题】:How to execute a query in PHP through a textbox [closed]如何通过文本框在 PHP 中执行查询 [关闭]
【发布时间】:2014-12-01 08:28:31
【问题描述】:

我想使用 PHP 通过 HTML 中的文本框区域执行查询。我知道这很容易发生 SQL 注入,但我并不担心。以下是我当前代码的一部分..

SQL 输出:

<?php

mysql_connect($host, $username, $password)or die("cannot connect"); 
mysql_select_db($db_name)or die("cannot select DB");

$query = "SELECT * FROM members"; // **I want to pass the query from a textbox value **

$result = mysql_query($query);

while($row = mysql_fetch_array($result)) {  
    echo $row['username'] . $row['password']; 

}

?>

【问题讨论】:

  • 你有什么问题?
  • 如何将查询从 HTML 文本框传递到 php 代码
  • 来自 php --> $query = $_REQUEST['message'];

标签: php html mysql sql database


【解决方案1】:

您已将文本框命名为 SQL 而不是 message

<?php
if ( isset($_GET["SQL"]) ) {
  $sql = $_GET["SQL"];
  $result = mysql_query($sql);
  if($result) { 
    //show output 
  } else {
    //error
  }
}
?>

正如您已经指出的那样,这很容易导致 SQL 注入,因此强烈建议不要这样做。

【讨论】:

  • 我收到输出资源 ID #4
  • 你想echo做什么?您可能试图在实际获取具有类似 mysql_fetch_assoc 的行之前尝试回显 MySQL 句柄或结果集(例如 $result 变量)变量
  • 是的 - 你是对的......谢谢!
  • 如果我想把它应用到多个数据库 - 所以我不必指定 $row 例如 while($row = mysql_fetch_array($result)) {echo " ” 。 $row['用户名'] 。 “ ”。 $row['密码'] 。 "";你会建议最好的解决方法是什么?
  • 你的意思是多表吗?所以你想传入一个查询并显示整个结果集?
【解决方案2】:

替换这个 -- $query = "SELECT * FROM members";

有了这个 --- $query = $_REQUEST['SQL'];

【讨论】:

    【解决方案3】:

    我不会纵容任性地允许 SQL 注入。 这是您将文本字段中的值传递到 php 脚本的方式,允许您在查询中使用它。

    您需要设置表单。

    <form action="process.php" method="POST">
        <input type="text" name="the-field">
        <input type="submit" name="submit" value="Submit">
    </form>
    

    在你的 php 脚本 (process.php) 中,你会有这样的东西:

    if(isset($_POST['submit'])) {
        $field = $_POST['the-field']; // obviously you'd sanitize it here.
    
        // run the query using PDO/Mysqli, etc...
    }
    

    强烈鼓励使用 PDOMysqli 而不是已弃用的 mysql_* 函数。

    以下是一些您可以参考的示例:


    这是一个 PDO 查询示例。

    <?php
    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
    $stmt->execute(array($id, $name));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    

    (Source)

    【讨论】:

    • 这太好了.. 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2016-07-15
    相关资源
    最近更新 更多