我一直在尝试使用php脚本自动化新数据库创建时遇到了一些麻烦。 基本上,脚本采用新的登录用户名并创建一个数据库(然后稍后插入一些表和数据,这也是通过php脚本完成的)。 我曾经不得不手动创建数据库,但现在需要使其自动化。使用“。”创建mysql数据库在名称(使用PHP)
问题是我以前只能使用web GUI中的phpadmin“new database”函数创建一个新的数据库,并输入诸如“test1.siteA”,“userb.siteB”之类的名称。
但是,现在我已经试图通过php脚本来做同样的事情,它会一直给我提供“我的语法错误...”,来自我最后的“回声”。
主要参数为:
$name = $user->username;
$servernm = 'localhost';
$usnm = 'user';
$pasd = 'user';
$dbname = $name;
$dbname .= '.site';
我发现该错误会消失,一旦我删除.site部分从代码(它仍然存在,即使我结合$ DBNAME到1线)。
根据我在网上找到的一些文章,似乎MySQL不允许使用“。”这样的特殊字符。被包含在数据库名称中。
对我来说,“.site”可以通过phpMyadmin手动添加,而php/mysqli脚本不允许这样做,这似乎很奇怪。
完整的脚本如下(我敢肯定,这可以很大程度上提高了,所以对于那些有任何建议也欢迎):
<?php
define("_VALID_PHP", true);
require_once(APPPATH. "/libraries/init.php");
include (BASEPATH . "/database/DB_temp.php");
$row = $user->getUserData();
$name = $user->username;
$servernm = 'localhost';
$usnm = 'user';
$pasd = 'user';
$dbname = $name;
$dbname .= '.site';
// Create connection
$conn = mysqli_connect($servernm, $usnm, $pasd);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Check if DB exist
$sql = "SELECT count(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$dbname'";
$check = mysqli_query($conn,$sql)
or die("Connection failed: " . mysqli_connect_error());
while($row = mysqli_fetch_array($check,MYSQLI_NUM))
{
$dbval = $row[0];
}
if ($dbval == "0")
{
$createsql = "CREATE DATABASE '$dbname' ";
}
if ($dbval == "1")
{
$createsql = "SELECT count(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$dbname'";
}
if (mysqli_query($conn, $createsql)) {
Echo "Completed. DBVAL= " .$dbval ;
}
else
{
echo "Error creating database: " . mysqli_error($conn);
}
?>
PHP版本:5.6.18 的phpmyadmin:4.5.4.1 Ubuntu 14.04
道歉,如果我在这里发布了一些发布错误。请让我知道他们,我会尽力纠正它。任何帮助是极大的赞赏!
如果你不关心自己,想想其他的开发人员将不得不支持你的代码与这样一个怪异的命名。 –
@aynber谢谢!这很好的解释了这种情况。我以前没有意识到这一点。现在将解决问题。 –
@YourCommonSense如果你也建议我应该如何改变这一点,那么这将是一个很好的建议。我不确定我是否能够改变整个结构,因为我只是在其中一部分工作,但如果真的需要改变,那么我一定会努力。 –