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

时间:2018-11-02 06:51:14

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

2 个答案:

答案 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连接在一起的表要多多关系。因此,例如,我将有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%的时间我使用关联数组作为返回值,因此您也可以进行设置。

欢呼!

答案 1 :(得分:0)

我不确定您在$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