如何从sql查询创建唯一的数据库名称

时间:2014-09-25 20:29:40

标签: php mysql

我需要为不同的用户创建单独的数据库。数据库名称将是该用户的名称。 我尝试了以下

$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";
}

但它不起作用。

如果我对数据库使用静态名称,则可行。这将创建数据库。 但我需要为不同的用户使用不同的数据库名称。

请帮忙。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果$userfoo,那么您正在尝试创建名为.foo.的数据库

请尝试以下任何一项:

$sql2 = "CREATE DATABASE '$user'";
$sql2 = "CREATE DATABASE '{$user}'";
$sql2 = "CREATE DATABASE '" . $user . "'";

请注意,即使您将$ _GET [&#39; u&#39;]仅过滤为字母数字,您仍然可能导致SQL语法错误,例如:考虑通过u=table01234的人。这些都不是有效的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()

会发出错误信号。