2016-05-03 4 views
0

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

ответ

1

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

mysqli_select_db($conn,"B2B"); 
+0

Это также верно, но так как он выбрал OO подход, '$ conn-> select_db()' более согласуется с его код. –

0

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

$conn->select_db('B2B'); 

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

0

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

Отметьте новый код.

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`) 
); 
+0

«email» должен быть для меня первичным ключом. Потому что его внешний ключ в другой таблице. Поэтому я удаляю первичный ключ из столбца «comp_id». Но он все еще не работает. i изменен СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ 'B2B.company_details' в CREATE TABLE IF NOT EXISTS 'B2B'.'company_details' и ' comp_id' INT AUTO_INCREMENT PRIMARY KEY, к 'comp_id' INT AUTO_INCREMENT, , но это еще не working.Help меня. –

+0

Вы не можете определить автоматическое приращение и НЕ определять поле в качестве первичного ключа. Чтобы этот код работал, вам нужно удалить свой AI из cust_id. Я пересмотрел свой ответ за вас. Вам необходимо будет автоматически увеличивать ваше поле comp_id вручную. –

+0

Проблема Thanx Tom Cash решена –

0

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

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

Ошибки других ответов в том, что внешний ключ не требует ссылки на первичный ключ. Для INNODB, it can reference any columns объявлен в любой индекс индекса:

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

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

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

PRIMARY KEY (`email`));"; 

С

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

 Смежные вопросы

  • Нет связанных вопросов^_^