我一直在嘗試使用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如果你也建議我應該如何改變這一點,那麼這將是一個很好的建議。我不確定我是否能夠改變整個結構,因爲我只是在其中一部分工作,但如果真的需要改變,那麼我一定會努力。 –