插入-未记录的字段到表中。

3
INSERT INTO `jos1_content` 
  (`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
VALUES  
  ($title, $introtext, $fulltext, 1, 1, $catid, 5)

查询由php脚本组成。变量的推导表明它们不为空。 在phpMyAdmin的请求下显示错误:

1064-您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册,以了解正确的语法使用方式,靠近'


1
你是否正在尝试将HTML插入数据库?如果是,你需要先使用mysql_real_escape_string进行转义。 - Austin Lin
1
你将这个字符串输入到phpMyAdmin中了吗? - Victor Nicollet
3个回答

7

在SQL中,您需要使用单引号来表示字符串 - 使用:

INSERT INTO `jos1_content` 
  (`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
VALUES  
  ('". $title ."', '". $introtext ."', '". $fulltext ."', 1, 1, $catid, 5)

更安全的方法是使用:
$query = sprintf("INSERT INTO `jos1_content` 
                    (`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
                  VALUES  
                   ('%s', '%s', '%s', 1, 1, %d, 5)",
        mysql_real_escape_string($title),
        mysql_real_escape_string($introtext),
        mysql_real_escape_string($fulltext),
        $catid);

参考资料:


你没有在他的查询中添加单引号,你只是改变了变量嵌入PHP字符串的方式。在发送到MySQL的查询中仍然没有单引号包围变量,因此它仍将以相同的方式失败。 - Dan Grossman
3
+1代表支持mysql_real_escape_string函数。我也看到了在Dan Grossman上面的评论后,查询语句得到了修正。 - GolezTrol
@OMG Ponies:在 $title 前面有两个单引号,我认为应该只有一个。 - ypercubeᵀᴹ

7

在将PHP变量插入字符串类型字段中,您需要用引号括起来:

INSERT INTO `jos1_content` 
(`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
VALUES  
('$title', '$introtext', '$fulltext', 1, 1, $catid, 5)

2
假设他的查询被双引号括起来,是的,它会,不像你的回答。 - Dan Grossman
1
@Dan Grossman:这与 PHP 无关。引号是必需的,因为 SQL 要求它们。 - Mark Byers
马克,我是在回复OMG Ponies说这种使用单引号的方法行不通。那条评论已被删除。 - Dan Grossman

3

阅读您所使用的编程语言的手册,了解关于预处理语句(prepared statements)的内容,或使用mysql_escape_string函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接