【发布时间】:2015-06-21 18:17:15
【问题描述】:
我第一次尝试让 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 错误?如何更正我的代码以免产生错误?
【问题讨论】:
-
您需要在插入查询中将值用单引号括起来。
-
您的服务器上是否启用了 MySQLi?
-
为了避免引用变量时引入的sql注入问题,确实需要切换到prepared statement。
-
顺便问一下,你确定你已经用root替换了mysql的标准asmin用户吗?如果您可以使用该帐户手动访问 mysql 终端进行连接并检查它是否正常工作。
标签: php mysql string mysqli server