数据被提交到一个表而不是另一个表(PHP)

时间:2014-01-22 13:07:52

标签: php mysql

我有一个奇怪的问题,因为在我的注册页面的PHP代码中,只有两个语句中的一个被提交到表中。因此,用户无法激活他们的帐户。

我几乎可以肯定它与我的PHP有关,因为在firebug中我得到了500错误,但是即使启用了PHP错误日志记录并启用了服务器日志记录它也没有在文件中显示任何内容。所以我不知所措,虽然有些才华横溢的网站可能会看到我遇到的问题。

我已经在数据插入数据库之前发了一个echo语句,我可以看到它。我的echo语句echo "'$u' '$e' '$p_hash' '$cn' '$c' '$ip'";向我显示我的变量带有一个值。我会发布截图,但显然我没有这样做的声誉,但是在插入声明之前,所有内容都显示在echo语句中。

与之相关的插入是

$sql = "INSERT INTO users (username, email, password, compname, country, ip, signup, lastlogin, notescheck) VALUES ('$u','$e','$p_hash','$cn','$c','$ip',now(),now(),now())";
$query = mysqli_query($db_conx, $sql); 
$uid = mysqli_insert_id($db_conx);

此后的insert语句正常工作并且数据进入表中。该声明如下。

$sql = "INSERT INTO useroptions (id, username, background) VALUES ('$uid','$u','original')";
$query = mysqli_query($db_conx, $sql);

这是我用来制作表格的PHP

$tbl_users = "CREATE TABLE IF NOT EXISTS users (
              id INT (11) NOT NULL AUTO_INCREMENT,
              username VARCHAR (16) NOT NULL,
              email VARCHAR (255) NOT NULL,
              password VARCHAR (255) NOT NULL,
              companyname VARCHAR (255) NOT NULL,
              website VARCHAR (255) NULL,
              country VARCHAR (255) NULL,
              userlevel ENUM ('a','b','c','d') NOT NULL DEFAULT 'a',
              avatar VARCHAR (255) NULL,
              ip VARCHAR (255) NOT NULL,
              signup DATETIME NOT NULL,
              lastlogin DATETIME NOT NULL,
              notescheck DATETIME NOT NULL,
              activated ENUM('0','1') NOT NULL DEFAULT '0',
              PRIMARY KEY (id),
              UNIQUE KEY username (username,email) 
            )";

我是网络开发的新手,但我以前从未见过这个,而且很奇怪。我联系了我的托管公司,他们说他们的数据库没有发生任何事情,所以这一切都很好,不是我的ajax,因为我的echo语句传入变量,而且只是一个插入语句有效。非常感谢您的帮助,我会尽快回复。

如果您需要任何其他信息,我很乐意提供!

干杯,

2 个答案:

答案 0 :(得分:3)

如果我没记错的话,users是MySQL中的保留关键字。因此,在将其作为表引用时,您需要使用反引号。实际上,建议所有表/列都标有反引号:

INSERT INTO `users` (`username`, `email`, `password`, `compname`, `country`, `ip`, `signup`, `lastlogin`, `notescheck`) VALUES ('$u','$e','$p_hash','$cn','$c','$ip',now(),now(),now())
--          ^     ^ Note the backticks

此外,您的表定义与插入语句(companyname vs compname)之间似乎不匹配。

最后但并非最不重要的是,您应该使用 prepared statements


无论如何,你应该检查错误!

$query = mysqli_query($db_conx, $sql); 
if (!$query) {
    //Something bad happened!
    var_dump($db_conx->error); //Show error details.
}

答案 1 :(得分:0)

你需要用`like this:

来逃避你的名字(表格和字段)
INSERT INTO `users` (`username`, `email`, `password`, `compname`, `country`, `ip`, `signup`, `lastlogin`, `notescheck`)

它告诉mysql解析器它实际上是字段名,并阻止它将字段名称视为语句。例如,password是一个语句,这很可能是您的查询无法执行的原因。