为什么我需要重新加载/刷新/运行此脚本TWICE 在刚刚创建的新数据库下获取新表?
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);
?>
答案 0 :(得分: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_ *函数的新替代品),但这涉及到数据库的更多数据传输,因此使用这种方法会稍微提高效率。虽然在这种情况下效率可以忽略不计!
答案 1 :(得分:2)
当mysql_select_db因数据库不存在而出错时,执行CREATE DATABASE
语句。
在此之后,没有第二次调用mysql_select_db
来更改为新创建的数据库。
CREATE TABLE
语句可能遇到“无数据库选择”类型错误。
对mysql_query的调用会引发SQL错误;检查成功完成是一个好主意,而不是仅仅假设一切都按计划进行。
而且,对于好和美丽这个世界的 love ,请不要使用 mysql_ < / strong>新开发的界面。请改用 mysqli 或 PDO 。
答案 2 :(得分: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
}
你基本上创建了数据库(当它不存在时)但是第一次没有连接到它 - 添加该行应该修复它。