Php脚本运行正常,但不会在数据库中创建表

时间:2017-09-22 12:00:30

标签: php mysql sql

嘿伙计我的php脚本的所有元素似乎都工作,它连接到数据库,它从不同的页面获取输入并将其保存为变量,我已经回显了sql语句并在myphpadmin中运行它它的工作原理但是当我从php脚本执行它时,一切都按预期运行,除了在数据库中没有创建表。 感谢任何你可以向我提出的建议 谢谢你们

<?php

$con = mysqli_connect("localhost","odoylegaming","pwd","odoylegaminggallerydb");

if(!$con)
{
die("Connection failed: ". mysqli_connect_error());
}
$Gallery_Name=$_POST['newgallery'];
if($Gallery_Name=="")
{
header("Location:Profile.php");
}
else
{
mysqli_select_db($con, "odoylegaminggallerydb");
$query = "CREATE TABLE IF NOT EXISTS $Gallery_Name(User_Name VARCHAR(25) PRIMARY KEY, Picture VARCHAR(250), Description VARCHAR(250), Date_Posted TIMESTAMP)";

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

if(false===$result)
{

die("table create failed: ". mysqli_error($con));
}
else
{
echo $query;
}
}

?>

2 个答案:

答案 0 :(得分:1)

请阅读mysqli_query()上的手册:

首先是连接参数,而不是现在的第二个参数。

顺便说一下;你在这里打开一个严肃的SQL注入。使用准备好的声明。

根据用户输入创建表格根本不安全。

在标题后添加exit;,否则您的代码可能希望继续执行。

答案 1 :(得分:0)

您的代码容易受到sql注入攻击请考虑使用预处理语句或像PDO这样的库来帮助防范那种事情,也就是说你正在创建一个动态表,这不是你可以用我的参数做的事情例如我添加了一些清洁剂,但这种东西本身并不是安全的设计。你真的不应该在你的应用程序中动态创建表,如果你需要创建单独的画廊依赖于MySQL的关系性质,并拥有一个带有user_id的Gallery表和一个用户表来获取该ID然后插入新的条目使用参数化查询,如果用户不存在,则创建它们,然后添加包含该用户ID的图库条目。

问题

在这种情况下,您的问题的根源是您为查询提供了无序的参数,您的连接变量应该首先出现。在我的例子中,我使用面向对象的mysqli而不是程序方式,如果你只是学习我会建议你使用类(如mysqli)作为对象,即使它们碰巧有程序实现。

<?php 
if (!isset($_POST['newgallery']) || empty($_POST['newgallery'])) {
    header("Location:Profile.php");
    return;
}

try {
    $galleryName = filter_input(INPUT_POST, 'newGallery', FILTER_SANITIZE_STRING);

    // If filter fails throw error related to variable cleaning
    if (!$galleryName) {
        throw new Exception('some descriptive message');
    }

    // if you really prefer procedural: $mysql = mysqli_connect();
    $mysqli = new mysqli('host', 'user', 'password', 'schema');

    // if mysqli does not instantiate, throw error
    if (!$mysqli) {
        throw new Exception($mysqli->error);
    }

    // this is still not ideal, but you can't create a table with a parameterized value.
    // the better question is why are you trying to create dynamic tables, that seems like poorly considered engineering.
    $tableName = $mysqli->real_escape_string($galleryName);
    /**
     * Procedural:
     * $tableName = mysqli_real_escape_string($mysqli, $galleryName);
     * $result = mysqli_query($mysqli, $sql)
     */
    $sql = "CREATE TABLE IF NOT EXISTS `{$tableName}` (User_Name VARCHAR(25) PRIMARY KEY, Picture VARCHAR(250), Description VARCHAR(250), Date_Posted TIMESTAMP)"
    $result = $mysqli->query($sql);

    if (!$result) {
        throw new Exception($mysqli->error);
    }

    echo 'Table creation success.';
    return true;
} catch (Exception $e) {
    error_log($e)
}
?>