我需要为不同的用户创建单独的数据库。数据库名称将是该用户的名称。 我尝试了以下
$user=preg_replace('#[^A-Za-z0-9]#','',$_GET['u']);
if(! $connect_dude )
{
die('Could not connect: ' . mysqli_error());
}
else{
echo 'Connected successfully<br />';
}
$sql2 = "CREATE DATABASE '.$user.'";
$query2=mysqli_query($connect_dude,$sql2);
if($query2===TRUE){
echo "Database created";
}
else{
echo "Not created";
}
但它不起作用。
如果我对数据库使用静态名称,则可行。这将创建数据库。 但我需要为不同的用户使用不同的数据库名称。
请帮忙。
提前致谢。
答案 0 :(得分:2)
如果$user
为foo
,那么您正在尝试创建名为.foo.
的数据库
请尝试以下任何一项:
$sql2 = "CREATE DATABASE '$user'";
$sql2 = "CREATE DATABASE '{$user}'";
$sql2 = "CREATE DATABASE '" . $user . "'";
请注意,即使您将$ _GET [&#39; u&#39;]仅过滤为字母数字,您仍然可能导致SQL语法错误,例如:考虑通过u=table
或01234
的人。这些都不是有效的DB(或表或字段)名称。
答案 1 :(得分:2)
“@ Fred-ii-你是救世主。你是最好的。你帮助我解决了我的最后一个问题。它工作了。请把它放在答案秒上。我会选择这个作为答案“
根据OP的要求:
删除引号和点'.$user.'
并使用变量周围的反引号。
$sql2 = "CREATE DATABASE `$user`";
Tables and column identifiers不需要引号或反引号。
虽然最好使用反引号,但该变量是否应包含reserved keyword,空格,连字符或SQL可能不同意的任何其他字符。
将or die(mysqli_error($connect_dude))
添加到mysqli_query()
会发出错误信号。