0

查询正在运行但未发送到 SQL 服务器。我当前的注册脚本。

$link = mysqli_connect("$server", "$user", "$pass", "$webdb");
$username = mysqli_real_escape_string($link, (string) $_POST['username']);
$displayname = mysqli_real_escape_string($link, (string) $_POST['display_name']);
$email = mysqli_real_escape_string($link, (string) $_POST['email']);
$password = sha1((string) $_POST['password']);
$query="INSERT INTO user (`username`, `nicename`, `email`, `password`)
VALUES ('$username', '$displayname', '$email', '$password', '1')";
mysqli_query($link, $query);
mysqli_close($link);
echo $query;
?>

我从查询中收到的输出:

INSERT INTO user (username, nicename, email, password) VALUES ('orion5814', 'Orion5814', 'my@abc.com', '72f2ac484bee398758e769530dd56228d905884d', '1')

我已经检查了我所有的链接变量,并且它们都设置正确,只要有正确的信息,所以我不知道从这里可以去哪里。抱歉有这些问题; 如果您认为它会有所帮助,您可以在 doxramos.org 上查看它。

4

3 回答 3

2

查询有缺陷。您命名 4 columns (username, nicename, email, password),但列出 5 个值('orion5814','Orion5814','my@abc.com','72f2ac484bee398758e769530dd56228d905884d','1') 如果删除最后一个值,查询应该可以工作。

此外,您可以通过使用面向对象的 mysqli 接口来简化代码,如下所示:

$username = $link->real_escape_string($_POST['username']);

$link->query($query);
$link->close();

您也不需要将变量显式转换为字符串,因为如果您的代码需要,这会自动完成。

于 2012-10-09T21:41:50.497 回答
2

正如 jordi12100 建议的那样,在连接到数据库或执行查询时检查错误是一种很好的做法。

你可以这样做:

$link = mysqli_connect("$server", "$user", "$pass", "$webdb") or die( "Error:" . mysqli_connect_error());

mysqli_query($link, $query) or die ("Error:" . mysqli_error($link));

这可以让你知道你做错了什么。希望这可以帮助。

于 2012-10-09T21:47:59.243 回答
1

您的查询中可能有错误。用 mysqli_error() 捕获错误;

于 2012-10-09T21:40:37.727 回答