在 XAMPP 中创建数据库(MySQL PDO)并将其与 php 代码连接
Posted
技术标签:
【中文标题】在 XAMPP 中创建数据库(MySQL PDO)并将其与 php 代码连接【英文标题】:Creating a database (MySQL PDO) in XAMPP and connect it with the php code 【发布时间】:2016-08-27 19:05:35 【问题描述】:我已经使用 Sublime3 编写了登录和注册表单的代码。我需要使用 mysql PDO 在 XAMPP 中创建一个数据库并将其链接到代码,以便通过数据库进行登录验证。 下面是我为数据库编写的代码。但是当我使用新用户名注册时,它不会自动创建一个表。注册期间输入的数据不存储在数据库中。 用 phpmyadmin 编写的代码
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`first_name` varchar(255) NOT NULL,
`middle_name`varchar(255),
`last_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
数据库连接代码
<?php
$dsn = 'mysql:host=localhost;dbname=ecs;';
$user = 'root';
$password = '';
try
$dbh = new PDO($dsn, $user, $password);
catch (PDOException $e)
echo 'Connection failed: ' . $e->getMessage();
?>
注册码
<?php
session_start();
require_once("../includes/dbconfig.php");
try
$uname = $_POST["username"];
$pword = $_POST["password"];
$first_name = $_POST["firstname"];
$middle_name = $_POST["middlename"];
$last_name = $_POST["lastname"];
$user_type = $_POST["user_type"];
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO users (username, password, first_name, middle_name, last_name, user_type)
VALUES (:username, :password, :first_name, :middle_name, :last_name, :user_type)";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':username', $uname);
$stmt->bindValue(':password', $pword);
$stmt->bindValue(':first_name', $first_name);
$stmt->bindValue(':middle_name', $middle_name);
$stmt->bindValue(':last_name', $last_name);
$stmt->bindValue(':user_type', $user_type);
$stmt->execute();
catch (PDOException $e)
echo 'PDO Exception Caught.';
echo 'Error with the database: <br />';
echo 'SQL Query: ', $sql;
echo 'Error: ' . $e->getMessage();
?>
你能告诉我我做错了什么吗?是代码还是 XAMPP 中的一些安装更改?
【问题讨论】:
永远不要存储纯文本密码!请使用 PHP 的 built-in functions 来处理密码安全问题。如果您使用低于 5.5 的 PHP 版本,您可以使用password_hash()
compatibility pack。在散列之前,请确保您 don't escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
如果您提供NOT NULL
列定义,您还必须为该列提供DEFAULT
值。
【参考方案1】:
我在您的表中没有看到user_type
列,所以我认为这就是导致问题的原因。您可以创建该列并重试或从您的 PHP 代码中删除它吗?另外,请像@Jay Blanchard 之前提到的那样加密您的用户密码。
【讨论】:
以上是关于在 XAMPP 中创建数据库(MySQL PDO)并将其与 php 代码连接的主要内容,如果未能解决你的问题,请参考以下文章