嘿伙计我的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;
}
}
?>
答案 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)
}
?>