2014-04-01 70 views
0

爲什麼我需要重新加載/刷新/運行這個腳本TWICEmySql沒有即時創建新表

在剛創建的新數據庫下獲取新表?

IOW ...此腳本運行完美,但不是第一次運行。

只有刷新後纔會創建新表。

<?php 

$dbhost = '127.0.0.1'; 
$dbusername = 'root'; 
$dbuserpass = ''; 
$dbname = 'newDatabase'; 

$link_id = mysql_connect ($dbhost, $dbusername, $dbuserpass); 
if (!mysql_select_db($dbname, $link_id)){mysql_query('CREATE DATABASE '.$dbname, $link_id);} 

$sql = "CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL auto_increment, 
`name` varchar(255) NOT NULL default '', 
`email` varchar(255) NOT NULL default '', 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; 

mysql_query($sql); 

?> 
+1

檢查'mysql_query()'和'mysql_error()'的返回值,看看是否有錯誤。注意:不要使用'mysql _ *()' - 這些函數已被棄用。使用'mysqli _ *()'或'PDO' –

回答

3

也許,如果數據庫不存在,那麼它不會選擇它,所以CREATE TABLE將失敗。

嘗試改變$sql查詢:

$sql = "CREATE TABLE IF NOT EXISTS `" . $dbname . "`.`users` (
`id` int(11) unsigned NOT NULL auto_increment, 
`name` varchar(255) NOT NULL default '', 
`email` varchar(255) NOT NULL default '', 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; 

編輯: 正如其他人所建議的,另一種可能的解決辦法是調用mysql_select_db(或你自己喜歡的新的mysql_替代*功能),但這涉及更多的數據傳輸到數據庫,所以使用這種方法會稍微有效一些。儘管在這種情況下效率可能會微不足道!

+0

S SU SUP SUPE SUPER SUPERB !!! A ++++++++++++++++++++ – puaction

+0

我認爲它的工作,然後:-)高興你得到它排序。 –

+0

是的,我喜歡這種方法[短於mysql_select_db($ dbname,$ link_id); ]謝謝你SOOOOOOOOOOOOOOOOOO很多! – puaction

1
<?php 


$link_id = mysql_connect ($dbhost, $dbusername, $dbuserpass); 
if (!mysql_select_db($dbname, $link_id)){ 
mysql_query('CREATE DATABASE '.$dbname, $link_id); 
mysql_select_db($dbname, $link_id); //add this 
} 

您基本上創建數據庫(當它不存在時),但不要第一次連接到它 - 添加該行應該修復它。

2

當mysql_select_db錯誤因爲數據庫不存在時,會執行CREATE DATABASE語句。

接下來,沒有第二次調用mysql_select_db來更改爲新創建的數據庫。

CREATE TABLE聲明很可能遇到「沒有數據庫選擇」類型的錯誤。

對mysql_query的調用會引發SQL錯誤;檢查成功完成是一個好主意,而不是假設一切都按計劃進行。


而且,對於所有的在這個世界上美麗的,不要使用mysql_界面進行新的開發。代替使用mysqliPDO

+0

提及使用PDO的mysqli的+1 –