繁体   English   中英

PHP MySQL-我做错什么了吗?

[英]PHP MySQL - Am I doing anything wrong?

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

我要插入的值:

$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);

我找不到问题! 我有什么想念的吗? 两个表都存在。

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

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

尝试这个:

    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答案。

幸运的是date不是受限制的名称。 顺便说一句,您现在可以使用日期值代替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);

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

该查询可能不会显示错误,因为在php.ini中已打开error_reporting:

尝试将error_reporting设置为E_ALL。

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

尝试这个:

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字段的占位符即可。

尝试一下:

INSERT INTO banlist VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM