使用OOP PHP和PDO将数据插入到mysql中

问题描述 投票:-1回答:3

我是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的人。

任何帮助将不胜感激。

php oop crud
3个回答
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注入的影响,但执行速度通常比内插查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。

来源:描述PDO ::引用php.net

最后但并非最不重要的......总是在你的MySQL查询中使用反引号“`”正确quote MySQL Keywords and Reserved Words,如PASSWORD。您在查询中将其用作字段,但不引用它。


0
投票

实际上代码工作正常,当我尝试使用localhost直接运行它而不使用phpstorm然后它工作..意味着问题是在我的IDE。

谢谢你的努力。


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));

    }
© www.soinside.com 2019 - 2024. All rights reserved.