我正在尝试基于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
答案 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。