【问题标题】:Creating Database and Table using php mysqli使用 php mysqli 创建数据库和表
【发布时间】:2016-05-03 08:43:53
【问题描述】:

我想将表单字段值插入到 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>

【问题讨论】:

    标签: php mysqli create-table


    【解决方案1】:

    创建表前选择数据库。

    mysqli_select_db($conn,"B2B");
    

    【讨论】:

    • 这也是事实,但由于他选择了面向对象的方法,$conn-&gt;select_db() 与他的代码更加一致。
    【解决方案2】:

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

    然后,您定义了两个主键。因此,假设您不希望 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`)
    );
    

    【讨论】:

    • 列 'email' 需要成为我的主键。因为它的外键在另一个表中。所以我从“comp_id”列中删除主键。但它仍然无法正常工作。我将 CREATE TABLE IF NOT EXISTS B2B.company_details 更改为 CREATE TABLE IF NOT EXISTS B2B.company_detailscomp_id INT AUTO_INCREMENT PRIMARY KEY,更改为 comp_id INT AUTO_INCREMENT,但它仍然无法正常工作。帮助我。跨度>
    • 您不能定义自动增量,也不能将字段定义为主键。要使此代码正常工作,您需要从 cust_id 中删除您的 AI。我已经为你修改了我的答案。您需要手动自动增加您的 comp_id 字段。
    【解决方案3】:

    创建表的代码中有错误。您提到了 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));
    

    检查新代码。

    【讨论】:

      【解决方案4】:

      在创建表之前你需要use数据库,像这样:

      $conn->select_db('B2B');
      

      更多详情,请查看此链接:http://php.net/manual/en/mysqli.select-db.php

      【讨论】:

        【解决方案5】:

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

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

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

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

        对于 NDB,它需要是没有附加列的唯一索引。

        因此你只需要替换

        PRIMARY KEY (`email`));";
        

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

        【讨论】:

          【解决方案6】:

          像这样创建表

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-12
            • 2015-06-01
            • 2015-01-31
            • 1970-01-01
            • 2013-08-30
            • 2013-02-02
            • 1970-01-01
            相关资源
            最近更新 更多