PHP SQL 字符串分配引发服务器错误

PHP SQL string assignment throws a server error

我正在尝试 PHP 第一次连接到 Apache 服务器上的 MySQL 数据库。下面是我正在使用的简单 PHP 代码。

 <?php
// To ensure that the $_POST superglobal is accessible.
print_r($_POST);
print_r($_POST['usertype']);

$db = mysqli_connect("localhost", "root", "", "rental_26349188");
if (mysqli_connect_errno()) {
  mysqli_connect_error();
  exit;
}

$sql = "INSERT INTO user_information (usertype, firstname, lastname, phonenumber, email, loginname, password) VALUES (".$_POST['usertype'].", ".$_POST['firstname'].", ".$_POST['lastname'].", ".$_POST['phonenumber'].", ".$_POST['email'].", ".$_POST['loginname'].", ".$_POST['password'].");"

mysqli_query($db, $sql);

mysqli_close($db); 
?>

数据库 table 之前是使用以下 SQL 命令创建的:

CREATE TABLE IF NOT EXISTS `user_information` (   `id` int(255) NOT NULL,   `usertype` varchar(255) NOT NULL,   `firstname` varchar(255) NOT NULL,   `lastname` varchar(255) NOT NULL,   `phonenumber` varchar(255) NOT NULL,   `email` varchar(255) NOT NULL,   `loginname` varchar(255) NOT NULL,   `password` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `user_information`   ADD PRIMARY KEY (`id`);

ALTER TABLE `user_information`   MODIFY `id` int(255) NOT NULL AUTO_INCREMENT;

我在加载页面时收到以下错误。

奇怪的是,我发现注释掉 PHP 代码中的 $sqlmysqli_query 行可以避免引发错误。我还尝试以面向对象的方式编写 mysqli 命令,以及将 $_POST['key'] 内容插入带有大括号替换的字符串(即 {$_POST['key']}),所有其中产生了相同的结果。同样清楚的是 PHP 能够访问数据库,因为它可以连接并关闭它。

为什么 SQL 字符串赋值给 PHP 变量会导致内部服务器 500 错误?我怎样才能更正我的代码以便不产生错误?

我没看到您在任何地方使用“'”表示值 - 您确定没有一个值有空格吗? 同样,以这种方式将用户直接输入到 SQL 查询中也不是好主意,因为它允许 sql 注入。 MySQL 具有 bindParam 机制,这使其安全 - 我强烈建议查看它的文档。 我知道我的笔记与当前问题相去甚远,但因为你告诉它是你首先接触 MySQl,所以我让我自己去做。 问候

响应500 Internal Error通常表示编译问题,f.e。脚本中的语法错误。

关于您的脚本,行

$sql = "INSERT INTO user_information ... .$_POST['password'].");"

没有像它应该的那样以分号 (;) 结尾(或者您将其放在字符串中)。添加到行尾,状态码500就会消失

尝试:

$db = mysqli_connect("localhost", "root", "", "rental_26349188");
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  exit;
}