我是PHP的新手并且正在尝试学习OOP PHP。
我正在创建一个注册表单(一个简单的表单)来学习OOP PHP,当我提交数据时,成功消息显示但数据未插入数据库。
以下是我的代码:
connection.php
<?php
class DBConnection extends PDO
{
public function __construct()
{
$host='mysql:host=localhost;dbname=OOP';
$user='root';
$password='';
parent::__construct($host,$user,$password);
$this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// always disable emulated prepared statement when using the MySQL driver
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
}
?>
的index.php
<?php
session_start();
/*include 'classes.php';
//$dbHandle = new DBConnection();
$ins=new basic_operation();
$ins->Insert_Data();*/
?>
<div class="col-lg-12">
<div class="col-lg-1"></div>
<div class="col-lg-7">
<form action="user_data.php" method="post" >
<input type="text" name="username" id="username" class="form-control"><br>
<input type="email" name="email" id="email" class="form-control"><br>
<input type="password" name="password" class="form-control" id="password"><br>
<input type="submit" name="submit" id="submit" value="submit">
</form>
</div>
</div>
<div>
<?php if (isset($_SESSION['insert']))
{
echo $_SESSION['insert'];
unset($_SESSION['insert']);
}
?></div>
</div>
</div>
User_data.php
<?php
session_start();
include 'classes.php';
$insert=new basic_operation();
$usr=$insert->Insert_Data();
//return $insert;
$_SESSION['insert']='data inserted successfuly';
header('location:index.php');
?>
Classes.php
<?php
include 'connection.php';
class basic_operation
{
public function Insert_Data()
{
if (isset($_POST['submit'])) {
$user = $_POST['username'];
$email = $_POST['email'];
$pass = $_POST['password'];
$smt = new DBConnection();
$qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')");
$qry->execute();
}
}
}
?>
如果有人知道如何使用OOP PHP和PDO在PHP中执行基本的CRUD(插入,更新,删除,选择)操作那么请提供链接,源代码,示例,以便我可以从中学习
我在互联网上搜索但是却能够找到连接代码...寻找描述性答案,因为我认为这个问题也会帮助很多尝试/想要学习OOP PHP的人。
任何帮助都会受到赞赏。
答案 0 :(得分:0)
在连接脚本中使用try-catch
来获取错误。
try {
$pdo = new PDO(
'mysql:host=localhost;port=3306;dbname=your_db;charset=utf8mb4',
'user',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4")
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Database connection has failed. Contact system administrator to resolve this issue!<br>';
$e->getMessage();
die();
}
在php中启用错误报告(在php脚本之上添加此内容)。
error_reporting(E_ALL);
由于您要使用预准备语句,因此必须绑定参数才能正确转义。
$qry = $smt->prepare("INSERT INTO `student` (`User_Name`,`Email`,`Password`)
VALUES (:user,:email,:pass);");
$qry->bindParam(':user', $user, PDO::PARAM_STR, 255);
$qry->bindParam(':email', $email, PDO::PARAM_STR, 255);
$qry->bindParam(':pass', $pass, PDO::PARAM_STR, 255);
$qry->execute();
带有绑定参数的预处理语句不仅更具可移植性, 更方便,免疫SQL注入,但通常要快得多 执行比内插查询,作为服务器端和客户端 可以缓存查询的编译形式。
来源:[{3}}
中PDO :: quote的说明最后但并非最不重要......总是在MySQL查询中使用反引号“`”正确php.net MySQL quote,例如 PASSWORD 。您在查询中将其用作字段,但不要引用它。
答案 1 :(得分:0)
实际上代码工作正常,当我尝试使用localhost直接运行它而不使用phpstorm然后它工作..意味着问题出在我的IDE中。
感谢您的努力。
答案 2 :(得分:0)
`if (isset($_POST['submit'])) {
$user = $_POST['username'];
$email = $_POST['email'];
$pass = $_POST['password'];
$smt = new DBConnection();
$qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')");
$qry->execute();
}`
试试这个
if (isset($_POST['submit'])) {
$user = $_POST['username'];
$email = $_POST['email'];
$pass = $_POST['password'];
$smt = new DBConnection();
$qry = $smt->prepare("INSERT INTO student(User_Name,Email,Password) VALUES (:user,:email,:pass)");
$qry->execute(array(':user'=>$user,':email'=>$email,':pass'=>$pass));
}