使用php-mysqli创建数据库和表


Creating Database and Table using php mysqli

我想将表单字段值插入DB"B2B"内的表"company_details"中。尝试使用php-mysqli连接来完成此操作。已创建数据库,但未创建表。有人能告诉我出了什么问题吗

<html>
<head>
    <title></title>
</head>
<body>
<?php 
    $servername="localhost";
    $username="root";
    $password="";
    $conn = new mysqli($servername, $username, $password);
    if ($conn->connect_error)
    {
        die("Connection failed: " . $conn->connect_error);
    } 
    $conn->query("CREATE DATABASE IF NOT EXISTS `B2B`"); 
    $sql="CREATE TABLE IF NOT EXISTS `B2B.company_details`(
                `comp_id` INT AUTO_INCREMENT PRIMARY KEY,
                `email` VARCHAR(30) NOT NULL,
                `password` VARCHAR(20) NOT NULL,
                `company_name` VARCHAR(70) NOT NULL,
                `address` VARCHAR(150) NOT NULL,
                `website` VARCHAR(70),
                `phone` VARCHAR(20),
                `mobile` VARCHAR(20) NOT NULL,
                `fax` VARCHAR(20),
                `contact_person` VARCHAR(30) NOT NULL,
                `deals_in` VARCHAR(300),
                `Introduction` VARCHAR(400),
                PRIMARY KEY (`email`));";
        if($conn->query($sql))
        {
            echo 'table is created succssfully';
        }
        function test_data($data)
        {
            $data=trim($data);
            $data=stripslashes($data);
            $data=htmlspecialchars($data);
            return $data;
        }
        $errors = array();
        if ( $_SERVER["REQUEST_METHOD"] =="POST" )
        {
            $email=test_data($_POST["email"]);
            $password=test_data($_POST["password"]);
            $companyName=test_data($_POST["companyName"]);
            $introduction=test_data($_POST["introduction"]);
            $deals_in=test_data($_POST["deals_in"]);
            $address=test_data($_POST["address"]);
            $website=test_data($_POST["website"]);
            $phone=test_data($_POST["phone"]);
            $mobile=test_data($_POST["mobile"]);
            $fax=test_data($_POST["fax"]);
            $contact_person=test_data($_POST["contact_person"]);
            $conn->query("INSERT INTO company_details (company_name, address, email, mobile, contact_person, password, website, phone, fax, introduction, deals_in ) VALUES ( '".$companyName."', '".$address."', '".$email."', '".$mobile."', '".$contact_person."', '".$password."', '".$website."', '".$phone."', '".$fax."', '".$introduction."', '".$deals_in."')");
            echo 'Submitted Successfully';
        }
        else
        {
            echo '<h2>Access is Denied</h2>';
        }
        $conn->close();
?>
</body>

在创建表之前选择数据库。

mysqli_select_db($conn,"B2B");

表的创建可能有几个原因。第一个错误出现在表名称行中。您需要对数据库名称和表名称使用回溯标记。

然后,您定义了两个主键。因此,假设您不希望email也成为主键,则此代码的修订版本将起作用:

CREATE TABLE IF NOT EXISTS `B2B`.`company_details` (
`comp_id` int(11) NOT NULL,
`email` varchar(30) NOT NULL,
`password` varchar(20) NOT NULL,
`company_name` varchar(70) NOT NULL,
`address` varchar(150) NOT NULL,
`website` varchar(70) NOT NULL,
`phone` varchar(20) NOT NULL,
`mobile` varchar(20) NOT NULL,
`fax` varchar(20) NOT NULL,
`contact_person` varchar(30) NOT NULL,
`deals_in` varchar(300) NOT NULL,
`introduction` varchar(400) NOT NULL,
PRIMARY KEY  (`email`)
);

创建表的代码中有错误。您提到了2个主键(电子邮件,comp_id),所以该表没有创建

CREATE TABLE IF NOT EXISTS `B2B.company_details`(
            `comp_id` INT AUTO_INCREMENT PRIMARY KEY,
            `email` VARCHAR(30) NOT NULL,
            `password` VARCHAR(20) NOT NULL,
            `company_name` VARCHAR(70) NOT NULL,
            `address` VARCHAR(150) NOT NULL,
            `website` VARCHAR(70),
            `phone` VARCHAR(20),
            `mobile` VARCHAR(20) NOT NULL,
            `fax` VARCHAR(20),
            `contact_person` VARCHAR(30) NOT NULL,
            `deals_in` VARCHAR(300),
            `Introduction` VARCHAR(400));

使用新代码进行检查。

在创建表之前,您需要use数据库,如下所示:

$conn->select_db('B2B');

有关更多详细信息,请查看此链接:http://php.net/manual/en/mysqli.select-db.php

正如其他人所说,在同一个表中不能有两个主键。

一般来说,代理密钥是个坏主意,而且外键约束系统确保了更新的完整性,所以需要使用它们的情况应该非常罕见。

其他答案的错误之处在于,没有要求外键引用主键。对于INNODB,它可以引用任何索引索引中声明的任何列:

InnoDB允许外键引用任何索引列或列组。但是,在被引用的表中,必须有一个索引,其中被引用的列按相同顺序列为第一列。

对于NDB,它需要是一个没有额外列的唯一索引。

因此,您只需更换

PRIMARY KEY (`email`));";

UNIQUE KEY `by_email` (`email`));";

创建这样的表

function CreateTableNode (&$formvars) {
    $host = 'localhost';
    $database = 'test';
    $dbuser = 'root';
    $dbpass = '';
    $pdo = new PDO('mysql:host=localhost; dbname=test', $dbuser, $dbpass);

    $serialno = $formvars['serialno'];
    $qry =  "CREATE TABLE ".$serialno." ("."
            `id` INT NOT NULL AUTO_INCREMENT , 
            `humidity` VARCHAR(50) NOT NULL , 
            `temperature` VARCHAR(50) NOT NULL , 
            `gasquality` VARCHAR(50) NOT NULL , 
            `timestamp` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , 
            PRIMARY KEY (`id`)
        )";
    $stmt = $pdo->prepare($qry);
    $stmt->execute();
    $pdo = null;
    return true; 
}