从php变量创建mysql表

时间:2016-10-13 18:26:50

标签: php mysql

我正在尝试基于php中的变量创建一个mysql表,但它没有任何解释就失败了。

$name = mysql_real_escape_string($_POST['name']);
mysql_query("CREATE TABLE `".$name."` ( name VARCHAR(30), type VARCHAR(30), style VARCHAR(30))");

当我设置$ name = test;然后它可以工作,但不能附加到它的变量提取。

我看过this之间的链接,他们都说它应该有用,但是从我看到它没有。

更新

我也尝试了下面的代码,但这会使页面脱机。

$variable=$_POST['name'];
mysqli_connect("localhost", "devices", "a") or die(mysql_error()); 
mysqli_select_db("devices") or die(mysqli_connect_error()); 
mysqli_query("CREATE TABLE $variable ( computer text, mac text, windows text)");

我正在运行PHP版本5.5.36

2 个答案:

答案 0 :(得分:2)

您可以使用htmlspecialchars($_POST['name'],ENT_QUOTES);清除名称。

此外,您应该使用PDO或MySQLi,因为MySQL已过时且不再受支持。

如果你想看到错误,请使用:

mysql_query("CREATE TABLE `".$name."` ( name VARCHAR(30), type VARCHAR(30), style VARCHAR(30))");

echo mysql_errno() . ": " . mysql_error() . "\n";

更新

MySQLi在PHP 5中可用

如果您打算使用MySQLi:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

if ($mysqli->connect_errno) {
    echo("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$variable=$_POST['name'];

if ($mysqli->query("CREATE TABLE $variable ( computer text, mac text, windows text)") === TRUE) {
    echo("Table successfully created.\n");
}

答案 1 :(得分:1)

我不完全理解100%为什么,但这一切都归结为下面的代码行。

$variable=$_POST['name'];

当我从TextWrangler切换到NetBeans以帮助进行语法检查时,我发现我收到错误Warning “Do not Access Superglobal $_POST Array Directly”

我转而使用过滤,而不是直接访问解决问题的$ _POST数组。

$variable=filter_input(INPUT_GET, 'name');

另一方面,由于MySQL过时,我确实交换了MySQLi。谢谢Lucas Desouza。