2010-05-10 103 views
0
public function create() { 


     echo $this->equipment->getCatId() . "<br/>"; 
     echo $this->equipment->getName() . "<br/>"; 
     echo $this->equipment->getYear() . "<br/>"; 
     echo $this->equipment->getManufacturer() . "<br/>"; 
     echo $this->equipment->getModel() . "<br/>"; 
     echo $this->equipment->getPrice() . "<br/>"; 
     echo $this->equipment->getLocation() . "<br/>"; 
     echo $this->equipment->getCondition() . "<br/>"; 
     echo $this->equipment->getStockNum() . "<br/>"; 
     echo $this->equipment->getInformation() . "<br/>"; 
     echo $this->equipment->getDescription() . "<br/><br/>"; 


     $db = Connect::connect(); 
     $current_time = date('y M d'); 
     $query = "INSERT INTO equipment (cat_id, name, year, manufacturer, model, price, location, condition, 
             stock_num, information, description, created, modified) 

             VALUES 

             ({$this->equipment->getCatId()}, {$this->equipment->getName()}, {$this->equipment->getYear()}, 
             {$this->equipment->getManufacturer()}, {$this->equipment->getModel()}, {$this->equipment->getPrice()}, 
             {$this->equipment->getLocation()}, {$this->equipment->getCondition()}, {$this->equipment->getStockNum()}, 
             {$this->equipment->getInformation()}, {$this->equipment->getDescription()}, '$current_time', '$current_time')"; 

     $result = $db->query($query); 

     return $db->insert_id; 

    } 
  • 顶部的回声适合数据库架构的所有显示有效的数据。
  • 没有连接错误

任何想法?这个MySQL查询有问题吗?

在此先感谢!

这里是echo'ed查询

INSERT INTO设备(CAT_ID,名称,年份,制造商,型号,价格,位置,状态,stock_num,信息,描述,创建,修改)VALUES(1,' R”,1 'SDF', 'SDF', '2', 'd', 'd', '3', 'asdfasdfdf', 'DF','10 5月10' ,'10 5月10' )

MySQL是给:#1064 - 你在你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'condition,stock_num,information,description,created,modified'附近使用正确的语法值VALUES(1,'1''1'

id int(11)unsigned NO PRI NULL AUTO_INCREMENT 编辑删除CAT_ID INT(11)无符号NO NULL
编辑删除PROD_NAME VARCHAR(255)是NULL
编辑删除prod_year VARCHAR(10)是NULL
编辑删除制造商的varchar(255)是NULL
编辑删除模型VARCHAR(255)是NULL
编辑删除价格VARCHAR(10)是NULL
编辑删除位置的varchar(255)是NULL
编辑删除条件VARCHAR(25)是NULL
编辑删除stock_num VARCHAR(128)是NULL
编辑删除信息文本YES NULL
编辑删除的描述文本是NULL
编辑删除创建VARCHAR(20)是NULL
编辑删除改性VARCHAR(20)是NULL

查询:INSERT INTO设备(CAT_ID,PROD_NAME,prod_year,制造商,型号,价格,位置,状态,stock_num,信息,描述,创建,修改d)VALUES(1, 'ASDF', '234', 'ADF', 'ASDF', '34', 'ASDF', 'ASDF', '234', 'ASDF', 'ASDF','10 5月10日”,'10 5月10' 日)

下面是从phpMyAdmin的,以防SQL出口有人想尝试复制此问题:http://pastie.org/954206

BLEHBLEHSDFOHSE - 因此很明显,‘条件’也是一个保留字.. 。扔了一些反引号,然后开始工作。

+0

不知道那个太..很好的捕获。 :-) – acm 2010-05-10 19:32:16

+1

语法错误发生之前的方式将MySQL的触摸数据库,这样他们就可以不与任何在单个查询不存在(如列类型)有关。语法错误的错误消息是可笑的无用的(尽管引用的字符串确实从错误的确切位置开始);使用语法突出显示的内容(例如MySQL查询浏览器)有助于避免大量基本错误而不会浪费太多时间。 – Tgr 2010-05-10 19:36:01

+0

SQL/PHP混合是可怕的,您需要使用MySQL绑定语句代替。 – TravisO 2010-05-10 19:50:15

回答

1

YEAR是MySQL中的保留字。如果你打算使用它,你将需要反拨(即`year`

+0

我将年份重命名为prod_year – ThinkingInBits 2010-05-10 19:17:27

0

假设位置信息和描述字符串引号丢失。

INSERT INTO equipment (cat_id, name, year, manufacturer, model, price, location, condition, 
             stock_num, information, description, created, modified) 

             VALUES 

             ({$this->equipment->getCatId()}, {$this->equipment->getName()}, {$this->equipment->getYear()}, 
             '{$this->equipment->getManufacturer()}', {$this->equipment->getModel()}, {$this->equipment->getPrice()}, 
             '{$this->equipment->getLocation()}', {$this->equipment->getCondition()}, {$this->equipment->getStockNum()}, 
             '{$this->equipment->getInformation()}', '{$this->equipment->getDescription()}', '$current_time', '$current_time')"; 
+0

你会如何去引用一个返回字符串的方法? 而字符串,你的意思是文字? – ThinkingInBits 2010-05-10 18:07:52

+0

通过执行'{$ this-> equipment-> getLocation()}',如示例中所示。 – Gazler 2010-05-10 18:09:33

+0

@ThinkinBits'{$ this-> equipment-> getInformation()}'就像这样。 – 2010-05-10 18:10:10

0

VARCHAR,则字符和文本字段需要他们周围的报价插入。回声SQL查询并检查是否发生。

0

,据我看到它在这一点上,你的问题是一年场无报价...

INSERT INTO设备(CAT_ID,名称, 年,制造商,型号,价格, 位置,状况,stock_num, 信息,描述,创建, 改性)VALUES(1, 'R',, 'SDF', 'SDF', '2', 'd', 'd', '3', 'asdfasdfdf', 'DF','10 5月10' ,'10 5月10' )

这里,问题是cat_id WITH报价

查询:INSERT INTO设备(CAT_ID, 名字,年,制造商,型号, 价格,位置,状态,stock_num, 信息,描述,创建, 改性)VALUES('1',“ASDF ”, '234', 'ADF', 'ASDF', '34', 'ASDF', 'ASDF', '234', 'ASDF', 'ASDF','10 5月10' ,'10 五月10' )

+0

INSERT INTO设备(CAT_ID,名称,prod_year,制造商,型号,价格,位置,状态,stock_num,信息,描述,创建,修改)VALUES(1, 'ASDF', '234', 'ADF', 'ASDF' , '34', 'ASDF', 'ASDF', '234', 'ASDF', 'ASDF','10 5月10' ,'10 5月10' )仍然会产生一个语法错误 – ThinkingInBits 2010-05-10 18:56:27

+0

@ThinkingInBits:没有prod_year在你的定义中。 – 2010-05-10 19:04:52

+0

- 你是否将年份字段更改为prod_year?该字段仍然是varchar? --- 是拼写正确的表名吗? --- 您是否在命令行尝试过该查询? ---走出想法!:-) – acm 2010-05-10 19:05:58

0

BLEHBLEHSDFOHSE - 显然,'条件'也是一个保留字...扔了一些反引号,然后它开始了加工。

+0

如果它正在工作,请回来并将其中一个答案标记为“答案”,以便我们可以继续并停止尝试回答问题... – EAMann 2010-05-10 21:32:11

0

停止使用mysql_query()并切换到mysqli和prepared statements,那么你不需要在你的SQL字符串中使OOP变为钝。它会看起来更干净像这样:

$query = 'INSERT INTO table (id,name,age) VALUES (?,?,?)';