mySql没有动态创建新表

时间:2014-04-01 21:33:25

标签: php mysql sql database create-table

为什么我需要重新加载/刷新/运行此脚本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);

?>

3 个答案:

答案 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
}

你基本上创建了数据库(当它不存在时)但是第一次没有连接到它 - 添加该行应该修复它。