使用php mysqli创建数据库和表

时间:2016-05-03 08:43:53

标签: php mysqli create-table

我想在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>

6 个答案:

答案 0 :(得分:1)

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

mysqli_select_db($conn,"B2B");

答案 1 :(得分:1)

您的桌子可能无法正确创建有几个原因。第一个错误在表名行中。您需要使用反引号作为数据库名称和表名。

然后,您已经定义了两个主键。因此,假设您不希望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 :(得分:0)

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

$conn->select_db('B2B');

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

答案 3 :(得分:0)

您的create table代码中存在错误。您提到了2个主键(email,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));

检查新代码。

答案 4 :(得分:0)

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

一般来说代理键是个坏主意,外键约束系统可以确保更新的完整性,因此您需要使用它们的情况应该非常少见。

其他答案的错误在于外键不需要引用主键。对于INNODB,在任何索引索引中声明it can reference any columns

  

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

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

因此您只需要替换

PRIMARY KEY (`email`));";

使用

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

答案 5 :(得分:0)

像这样创建表

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; 
}