我想在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>
答案 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;
}