【问题标题】:PHP / MySQL: Create Database from User InputPHP / MySQL:从用户输入创建数据库
【发布时间】:2016-11-21 23:39:21
【问题描述】:

如果该数据库不存在,我想根据用户输入创建一个数据库。问题是,我不明白如何检查数据库是否存在。

还有一个问题是我想知道下面的代码是否可行:

if (isset($_POST['companyName'])) {
   $companyName = $_POST['companyName'];
}

$query = "
    CREATE DATABASE 'companyName';
       USE 'companyName';
    CREATE TABLE users (
           ID int NOT NULL AUTO_INCREMENT,
           FirstName varchar(255),
           LastName varchar(255),
           user text,
           Password varchar(255),
           Email varchar(255),
           PRIMARY KEY (ID)
   );
";

$result = mysqli_query($conn, $query);

因为基本上我输入了整个 SQL 代码并只是查询它,这会产生任何问题吗?

我对PHP和MySQL不是很了解,所以感谢您的关注并提前回答我的问题!

【问题讨论】:

  • 这里真正的问题是“为什么?”。 在此处插入 Ryan Reynolds 表情包。但是说真的,你系统的方案是什么,为什么要通过用户的输入来创建数据库?
  • 就安全性而言,最好先创建一个数据库,然后简单地添加用户数据,即使它是第一条记录。用户能够将数据输入 Web 表单,然后间接运行 SQL 代码,并没有任何好处。
  • 如何查看:mysql_select_db('your_db_name') or die ('DB NOT FOUND');
  • 我需要为每家公司拥有唯一的数据库,并且在每家公司中都包含其用户数据。并且在数据库中包含公司的表。这是一个两步注册表单,就像他们创建公司或找到他们的公司,然后在公司内注册为用户一样。我不确定这是否有意义,如果不是,请告诉我,我会尝试更好地解释,但是有更好的方法吗?
  • @RonaldNg 你在试试我的源 xD 吗?

标签: php mysql


【解决方案1】:

你可以试试这个

<?php
$servername = 'localhost';
$username = 'root';
$password = 'xxxxx';

$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
    $conn =  mysqli_connect($servername, $username, $password,'myDB');
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $query = "CREATE TABLE users
          (
            ID int NOT NULL AUTO_INCREMENT,
            FirstName varchar(255),
            LastName varchar(255),
            user text,
            Password varchar(255),
            Email varchar(255),
            PRIMARY KEY (ID)
          )";
    if ($conn->query($query) === TRUE) {
        echo "Table users created successfully";
    } else {
        echo "Error creating table: " . $conn->error;
    }
} else {
    echo "Error creating database: " . $conn->error;
}

$conn->close();
?>

我的结果

但我不建议用户在您的 sql server 中创建新数据库。

【讨论】:

    【解决方案2】:

    在用于 mysql 查询之前,您应该先过滤掉用户输入。使用 htmlspecialchars()stripslashes() 函数。

    在创建数据库之前,您应该检查它是否存在。您可以使用:CREATE DATABASE IF NOT EXISTS yourdb;

    不建议根据用户输入创建数据库和表,但如果您没有其他选择,请确保过滤用户输入。

    【讨论】:

    • 这就是带有绑定参数的预处理语句的用途 - 作为一般规则不要将变量插入到 SQL 字符串中。
    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 2012-07-23
    • 1970-01-01
    • 2015-04-25
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多