Создание базы данных и таблицы с использованием php mysqli

Я хочу вставить значения полей формы в таблицу «company_details» внутри БД «B2B». Попытка сделать это с подключением 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

Решение

Выберите базу данных перед созданием таблицы.

mysqli_select_db($conn,"B2B");
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`)
);
1

У вас есть ошибка в вашем коде для создания таблицы. Вы упомянули 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));

Проверьте с новым кодом.

0

Перед созданием таблицы вам нужно use база данных, как это:

$conn->select_db('B2B');

Для более подробной информации, проверьте эту ссылку: http://php.net/manual/en/mysqli.select-db.php

0

Как уже говорили другие, вы не можете иметь 2 первичных ключа в одной таблице.

Обычно суррогатные ключи — плохая идея, а система ограничений внешнего ключа обеспечивает целостность обновлений, поэтому обстоятельства, когда вам необходимо их использовать, должны быть очень редкими.

Что другие ответы имеют неправильно, так это то, что не требуется, чтобы внешний ключ ссылался на первичный ключ. Для INNODB, он может ссылаться на любые столбцы объявлено в любом индексе индекса:

InnoDB позволяет внешнему ключу ссылаться на любой столбец индекса или группу столбцов. Однако в ссылочной таблице должен быть индекс, в котором указанные столбцы перечислены как первые столбцы в том же порядке.

Для NDB это должен быть уникальный индекс без дополнительных столбцов.

Следовательно, вам просто нужно заменить

PRIMARY KEY (`email`));";

С

UNIQUE KEY `by_email` (`email`));";
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector