【问题标题】:What is wrong with my SQL syntax here?我的 SQL 语法有什么问题?
【发布时间】:2011-02-20 05:43:55
【问题描述】:

我正在尝试使用 Web 前端创建 IT 资产数据库。

我已经使用 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 服务器版本相对应的手册,以在第 2 行的 ''、'678'、'Server'、'789')' 附近使用正确的语法

该数据只是我试图放入其中的测试数据,但它看起来是 $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 />";

?>

在 Ubuntu 10.04 上运行标准 LAMP 堆栈。

谢谢。

【问题讨论】:

  • 一些小技巧:使用$_SESSION 而不是setcookie(),并转义您的输入数据,这样就不会发生取消引用攻击。
  • 您能详细说明一下吗? - 有点刚开始同时学习 ubuntu 服务器、php 和 mysql,任何建议都将不胜感激。谢谢。

标签: php sql mysql syntax


【解决方案1】:

您缺少开场白,以下是更正的部分:

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

【讨论】:

    【解决方案2】:

    什么Galen said。此外,您的代码容易受到SQL Injection 的攻击 - 而且它通常会在嵌入单引号的任何用户输入数据方面出现问题。

    【讨论】:

      【解决方案3】:

      您在 $purchase_order 之前缺少'

      【讨论】:

        【解决方案4】:

        您需要在 $purchase_order 之前有一个起始报价 '

        【讨论】:

          猜你喜欢
          • 2016-04-11
          • 2015-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-29
          • 2012-07-07
          • 2012-05-02
          相关资源
          最近更新 更多