0

现在两个小时,我正在尝试将一个值插入到表中。我没有收到任何错误,也找不到问题所在!

我试图插入的值:

$query = "INSERT INTO banlist (banid, active, ip, by, date, reason) VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')";
mysql_query($query);

一个完美运行的示例值:

$query = "INSERT INTO accounts (username, password, email, regdate) VALUES ('test', 'test', 'test@test.test', 't-t-t t:t:t')";
mysql_query($query);

我找不到问题!我错过了什么吗?两个表都存在。

4

6 回答 6

7

问题是您为字段“by”选择的名称是保留字。您必须将其更新为不在此列表中的单词。

mysql_query()此外,将来您可以通过检查是否返回 false,然后调用mysql_error()错误消息来轻松查看问题所在。

于 2013-01-15T19:06:06.767 回答
1

尝试这个:

    CREATE TABLE ban (
    banid int auto_increment primary key, 
    active int,
    ip varchar (20), 
    `by` varchar (20),
    `date` varchar(8),
    reason varchar(20)                                             
        );                                         

    INSERT INTO ban (active, ip, `by`, `date`, reason)
    VALUES 
    (1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')
    ;

    SELECT * FROM ban;

http://www.sqlfiddle.com/#!2/1959f/1

一些备注:

像其他几个人一样(例如@wintercounter、@user1909426)已经指出您在MySQL 中使用了受限字词。如果您确实使用了受限词,则使用 ``(反引号)或仅在每一列上使用它们。

我认为在插入的第一部分中使用 null 会产生问题。此列可能是带有 auto_increment 的整数列。请参阅@wintercounter 答案。

幸运的是,日期不是一个受限制的名称。顺便说一句,您现在可以使用日期值而不是 varchar 值。

关于@tadman 的评论,不推荐使用 mysql 而不是 mysqli 或 PDO。mysql 库从 PHP 5.5 版本开始被贬低,请参阅 php 手册。您还需要包括错误处理。

为了完整起见,这是使用 MySQLi 时的 php 代码:

  $link = mysqli_connect($hostname, $username, $password, $database);
  if (!$link){ 
  echo('Unable to connect to database');
  }

  else{
  mysqli_query("INSERT INTO ban (active, ip, `by`, `date`, reason) VALUES (1,'10.25.47.88', 'AUTOBAN', '12-12-45', 'test'))", $link); 
  }

  mysqli_close($link);

对于 mysql 版本:

  $hostname = "hostname";
  $username = "username";
  $username = "password";
  $database = "database";

  $link = mysql_connect($hostname, $username, $password);
  mysql_database ($database)
  if (!$link){ 
  echo('Unable to connect to database');
  }

  else{
  mysql_query("INSERT INTO ban (active, ip, `by`, `date`, reason) VALUES (1,'10.25.47.88', 'AUTOBAN', '12-12-45', 'test')"); 
  }

  mysql_close($link);
于 2013-01-19T16:41:58.957 回答
0

在每个变量中使用 mysql 错误语句以了解您的错误发生在哪一行。

于 2013-01-15T19:09:34.530 回答
0

该查询可能不会显示错误,因为在您的 php.ini 中关闭了 error_reporting:

尝试将 error_reporting 设置为 E_ALL。

此外,查询可能不起作用,因为您正在发送“NULL”作为 banid 的值,这可能是不允许 NULL 值的主键或外键/索引。

于 2013-01-15T19:09:42.730 回答
0

尝试这个:

INSERT INTO `banlist` (`banid`, `active`, `ip`, `by`, `date`, `reason`) VALUES ('', 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')

如前所述,'by' 是保留关键字,但您可以在解析中帮助 MySQL,以便它知道它是字段名称还是命令。

编辑:我已将 NULL 更改为 ''。我不确定,从未尝试过,但如果它是一个 AI 字段,也许你不能在那里使用 NULL,只需使用一个空的内容作为 ID 字段的占位符。

于 2013-01-15T19:13:43.350 回答
-3

试试这个:

INSERT INTO banlist VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')
于 2013-01-15T19:07:11.660 回答