<?PHP
try{
$handler = new PDO($servername, $username, $password);
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE user_details (
id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(30) NOT NULL,
fullname VARCHAR(30) NOT NULL,
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
gender ENUM('male','female','other','') NOT NULL , PRIMARY KEY (id))
ENGINE = InnoDB
)";
echo "Sucessfullll";
$handler->exc($sql);
} catch (PDOException $msg){
echo $msg->getMessage();
die();
}
?>
答案 0 :(得分:0)
您还有一个多余的括号)
$sql = "CREATE TABLE user_details (
id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(30) NOT NULL,
fullname VARCHAR(30) NOT NULL,
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
gender ENUM('male','female','other','') NOT NULL ,
PRIMARY KEY (id)
) ENGINE = InnoDB )";
应该是
$sql = "CREATE TABLE user_details (
id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(30) NOT NULL,
fullname VARCHAR(30) NOT NULL,
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
gender ENUM('male','female','other','') NOT NULL ,
PRIMARY KEY (id)
) ENGINE = InnoDB";
您可能还需要INT的长度,我忘记了。
索引
我总是像这样id INT(10) UNSINGED NOT NULL AUTO_INCREMENT
那样执行我的ID,因为没有人喜欢拥有负ID。然后我将制作UNIQUE(username)
和UNIQUE(email)
,也许还有INDEX(fullname)
。
索引取决于您要搜索的计划,插入和更新记录所需的时间越长,索引越多。但是对于您的普通网站来说,这是非常不明显的。
如果您打算一次插入十万行,那么您将需要对索引更加小心,因为对于每个索引,在修改数据时需要花费一些额外的时间来编译它们。
命名约定
您的字段名称看起来不错,没有复数,没有大小写。我在这里唯一要更改的是将表命名为users
,我通常将表复数,并使用_
作为标记联结表的方法,或者将2个表与Many连接在一起的表要多多关系。因此,例如,我将有users
和addresses
,然后是一个将它们users_addresses
连接起来的表。
如果它是一个具有一对多表的表格,那么我将对一个表进行非复数处理,而对多个表进行复数处理。因此,如果每个用户可以上传许多文件。一对多,我将其命名为user_uploads
。这样一来,无需打开PHPmyAdmin或尝试记住我的设置方式,就可以了解它之间的关系。
我只想提及这一点,因为按照我的命名约定,您要使用的名称将是一个包含有user_id外键的详细信息的表。
我应该说每个人的命名约定都有些不同,主要是出于某种原因命名事物并保持一致。
最后一件事
这只是我的意见,但我发现以这种方式进行连接会更好:
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$handler = new PDO($servername, $username, $password, $options);
通过将其作为选项发送,如果连接失败,它将引发异常。否则,直到初始连接后,您才需要设置模式。大概有90%的时间我使用关联数组作为返回值,因此您也可以进行设置。
欢呼!
答案 1 :(得分:0)
我不确定您在$servername
变量中存储了什么值。如果仅存储IP地址或主机名,那是错误的。
PDO构造函数的第一个参数是数据源名称(dsn
)。 MySQL DSN的一个示例是:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$handler = new PDO($dsn, $username, $password);