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 代码中的 $sql
和 mysqli_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;
}
我正在尝试 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 代码中的 $sql
和 mysqli_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;
}