insert - 表中未记录的字段

Geo*_*oGo 3 mysql sql mysql-error-1064

INSERT INTO `jos1_content` 
  (`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
VALUES  
  ($title, $introtext, $fulltext, 1, 1, $catid, 5)
Run Code Online (Sandbox Code Playgroud)

查询由php脚本组成.变量的推导表明它们不是空的.应phpMyAdmin的请求显示错误:

1064 - 您的SQL语法出错; 检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法

OMG*_*ies 7

您需要使用单引号来指示SQL的字符串 - 使用:

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

更安全的方法是使用:

$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);
Run Code Online (Sandbox Code Playgroud)

参考:

  • 为mysql_real_escape_string +1.我也看到Dan Grossmans在上面评论后查询得到纠正. (3认同)

Jac*_*kin 7

您需要用引号括起您插入到字符串类型字段中的PHP变量:

INSERT INTO `jos1_content` 
(`title`, `introtext`, `fulltext`, `state`, `sectionid`, `catid`, `attribs`)
VALUES  
('$title', '$introtext', '$fulltext', 1, 1, $catid, 5)
Run Code Online (Sandbox Code Playgroud)

  • 假设他的查询用双引号括起来,是的,它会与你的回复不同 (2认同)