【问题标题】:mysql insert error in my form [duplicate]我的表单中的mysql插入错误[重复]
【发布时间】:2012-05-10 07:47:02
【问题描述】:

我有这个 php 代码:

$db = new mysql;
$new_bad = $_POST['new_bad'];
$new_replace = $_POST['new_replace'];
if ($_POST['submit']) {
  if ($new_bad && $new_replace) {
    $db->query("SELECT * FROM BAD_WORDS WHERE BAD_WORD='".$new_bad."'");
    if ($db->CNrows() == 0) {
      $db->query("
        INSERT INTO BAD_WORDS(BAD_WORD,REPLACE)
        VALUE('".$new_bad."','".$new_replace."')
      ");
      $err = "added succesfully..";
      $tmp->assign('msg', 'true');
    } else {
      $err = "the word is in table ..!!";
      $tmp->assign('msg', 'false');
    }
  } else {
    $err = "you must fill all feilds ..!!";
    $tmp->assign('msg', 'false');
  }
}

但是当我测试它时,我发现了这个错误:

您的 SQL 语法有错误;检查相应的手册 到您的 MySQL 服务器版本,以便在“REPLACE”附近使用正确的语法) 第 1 行的 VALUES('bad1','replace1')'

有什么问题??

$tmp-> = 这是一个聪明的模板类,可以毫无问题地工作

BAD_WORDS 表 = ID,BAD_WORD,REPLACE

【问题讨论】:

  • REPLACE 是保留关键字...
  • Mr47 -- 不,因为当我获取单词时我没有发现问题
  • 您的代码容易受到 SQL 注入的攻击。您真的应该使用准备好的语句,将变量作为参数传递到其中为 SQL 评估。如果你不知道我在说什么,或者如何解决它,请阅读Bobby Tables 的故事。
  • Mr47 - 我已更改字段名称,我的代码现在可以使用 - 谢谢

标签: php mysql sql forms


【解决方案1】:

Replace 是 MySQL 中的保留字。尝试在它周围加上引号(这些`)。 VALUE 中还需要一个 S

像这样:

INSERT INTO `BAD_WORDS` (`BAD_WORD`,`REPLACE`) VALUES [...]

您可以在此处查看 MySQL 查询中的所有保留字:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

编辑:

$db->query("INSERT INTO `BAD_WORDS` (`BAD_WORD`,`REPLACE`) VALUES ('$new_bad','$new_replace')");

【讨论】:

  • 我已更改字段名称,我的代码现在可以使用
【解决方案2】:

在你的表结构中我看到了

ID,BAD_WORD,REPLACE

id 字段也需要一个值所以替换:

$db->query("INSERT INTO BAD_WORDS(BAD_WORD,REPLACE)VALUE('".$new_bad."','".$new_replace."')");

与:

$db->query("INSERT INTO BAD_WORDS(ID,BAD_WORD,REPLACE)VALUE('','".$new_bad."','".$new_replace."')");

如果 id 是自动递增的,否则给 id 一个值。

【讨论】:

  • id 是自动递增的,所以我没有,但它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2010-10-23
  • 2019-03-10
相关资源
最近更新 更多