我试图让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);
?>
以前使用以下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错误?如何更正我的代码以便不会产生错误?
答案 0 :(得分:2)
响应500 Internal Error
通常意味着编译问题,例如。脚本中的语法错误。
关于你的脚本,行
$sql = "INSERT INTO user_information ... .$_POST['password'].");"
不会以分号(;
)结束(或者将其放在字符串中)。在行尾添加它,状态代码500
将消失。
答案 1 :(得分:1)
我看到你没有使用过#34;&#39;&#34;&#34;&#34;&#34;对于值 - 您确定没有值的空格。 以这种方式使用直接用户输入到SQL查询也不是一个好主意,因为它允许sql注入。 MySQL有bindParam机制,这使它安全 - 我强烈建议查看文档。 我知道我的笔记远离当前的问题,但因为你告诉它首先是你与MySQl的联系,我让我自己去做。 此致
答案 2 :(得分:0)
尝试:
$db = mysqli_connect("localhost", "root", "", "rental_26349188");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit;
}