Что не так с моим синтаксисом SQL здесь? - PullRequest
5 голосов
/ 17 мая 2010

Я пытаюсь создать базу данных ИТ-ресурсов с веб-интерфейсом.

Я собрал некоторые данные из форм, используя POST, а также одну переменную, которая уже была записана в cookie.

Я впервые пытался ввести данные в базу данных.

Вот код:

<?php

//get data
$id = $_POST['id'];
$company = $_POST['company'];
$location = $_POST['location'];
$purchase_date = $_POST['purchase_date'];
$purchase_order = $_POST['purchase_order'];
$value = $_POST['value'];
$type = $_COOKIE["type"];
$notes = $_POST['notes'];

$manufacturer = $_POST['manufacturer'];
$model = $_POST['model'];
$warranty = $_POST['warranty'];

//set cookies
setcookie('id', $id);
setcookie('company', $company);
setcookie('location', $location);
setcookie('purchase_date', $purchase_date);
setcookie('purchase_order', $purchase_order);
setcookie('value', $value);
setcookie('type', $type);
setcookie('notes', $notes);

setcookie('manufacturer', $manufacturer);
setcookie('model', $model);
setcookie('warranty', $warranty);

//checkdata

//start database interactions

// connect to mysql server and database "asset_db"
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error());
mysql_select_db("asset_db") or die(mysql_error());

// Insert a row of information into the table "asset"
mysql_query("INSERT INTO asset 
(id, company, location, purchase_date, purchase_order, value, type, notes) VALUES('$id', '$company', '$location', '$purchase_date', $purchase_order', '$value', '$type', '$notes') ") 
or die(mysql_error());
echo "Asset Added";

// Insert a row of information into the table "server"
mysql_query("INSERT INTO server 
(id, manufacturer, model, warranty) VALUES('$id', '$manufacturer', '$model', '$warranty') ") 
or die(mysql_error());
echo "Server Added";


//destination url
//header("Location: verify_submit_server.php");

?>

Я получаю ошибку: У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '', '678', 'Server', '789') 'в строке 2

Эти данные - просто тестовые данные, которые я пытался добавить туда, но они выглядят как $ value, $ type, $ notes.

Вот таблица создания операторов, если они помогают:

<?php

// connect to mysql server and database "asset_db"
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error());
mysql_select_db("asset_db") or die(mysql_error());

// create asset table
mysql_query("CREATE TABLE asset(
id VARCHAR(50) PRIMARY KEY, 
company VARCHAR(50), 
location VARCHAR(50),
purchase_date VARCHAR(50),
purchase_order VARCHAR(50),
value VARCHAR(50),
type VARCHAR(50),
notes VARCHAR(200))")
or die(mysql_error());  
echo "Asset Table Created.</br />";

// create software table
mysql_query("CREATE TABLE software(
id VARCHAR(50) PRIMARY KEY, 
software VARCHAR(50),
license VARCHAR(50))")
or die(mysql_error());  
echo "Software Table Created.</br />";

// create laptop table
mysql_query("CREATE TABLE laptop(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50),
model VARCHAR(50),
serial_number VARCHAR(50),
esc VARCHAR(50),
user VARCHAR(50),
prev_user VARCHAR(50),
warranty VARCHAR(50))")
or die(mysql_error());  
echo "Laptop Table Created.</br />";

// create desktop table
mysql_query("CREATE TABLE desktop(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50),
model VARCHAR(50),
serial_number VARCHAR(50),
esc VARCHAR(50),
user VARCHAR(50),
prev_user VARCHAR(50),
warranty VARCHAR(50))")
or die(mysql_error());  
echo "Desktop Table Created.</br />";

// create server table
mysql_query("CREATE TABLE server(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50), 
model VARCHAR(50),
warranty VARCHAR(50))")
or die(mysql_error());
echo "Server Table Created.</br />";

?>

Запуск стандартного стека LAMP в Ubuntu 10.04.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 17 мая 2010

Вам не хватает ' до $ purchase_order.

3 голосов
/ 17 мая 2010

Что Гален сказал . Кроме того, ваш код уязвим для SQL-инъекций - и у него, как правило, возникают проблемы с любыми данными, вводимыми пользователем, со встроенными одинарными кавычками.

3 голосов
/ 17 мая 2010

вам нужна начальная цитата 'до $ purchase_order

2 голосов
/ 17 мая 2010

у вас отсутствует начальная цитата, ниже приведен исправленный раздел:

mysql_query("INSERT INTO asset 
(id, company, location, purchase_date, purchase_order, value, type, notes) VALUES('$id', '$company', '$location', '$purchase_date', '$purchase_order', '$value', '$type', '$notes') ") 
or die(mysql_error());
echo "Asset Added";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...