到目前为止,我正在尝试使用 PHP 在我的数据库上创建一个表,我已经设法使用 PHP 创建了一个数据库,但无法创建表/表

  • 本文关键字:创建 一个 数据库 PHP 到目前为止 php html
  • 更新时间 :
  • 英文 :

<?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();
}
?>

我不确定您在变量中存储了什么值$servername。如果您只存储 IP 地址或主机名,那就错了。

PDO构造函数的第一个参数是数据源名称(dsn)。MySQL DSN的一个示例是:

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$handler = new PDO($dsn, $username, $password);

请参阅 http://php.net/manual/en/pdo.construct.php

您有一个额外的不匹配的括号)

$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因为没有人喜欢负身份证。 我会做UNIQUE(username)UNIQUE(email),也许是一个INDEX(fullname).

索引取决于您计划搜索的内容,您拥有的索引越多,插入和更新记录所需的时间就越长。 但是对于您的普通网站来说,这是非常不明显的。

如果您计划一次插入 10 行数千行,则需要更加小心索引,因为对于每个索引,在修改数据时编译它们需要一些额外的时间。

命名约定

您的字段名称看起来不错,没有复数形式没有大小写。 我在这里唯一要更改的是将表命名为users,我通常将表复数化,并使用_作为标记连接表的一种方式,或者将 2 个表与多对多关系连接在一起的表。 因此,例如,我会usersaddresses然后有一个将它们连接起来的桌子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% 的时间我使用关联数组来返回,所以你也可以设置它。

干杯!