我的OOP PHP方法没有执行

时间:2015-07-21 19:47:13

标签: php mysql oop pdo

我有文件' class_reg.php'包含课程' Reg'以及一些方法注册'在其中,它返回一些输入值并通过PDO将其插入数据库。我有' dbconfig.php'文件,我连接到数据库,包括我的' class_reg.php'文件并创建对象' $ user'。我有一些注册.php'我包含的文件' dbconfig.php'文件并尝试运行我的方法'注册'但它不起作用。所以这里是我的文件:

class_reg.php

<?php
class Reg{

    public $db;

    function __construct($con){
        $this->db = $con; //$con содержит подключение к базе данных
    }

    public function registration($userName, $pass){
        try{
            $sql = $this->db->prepare("INSERT INTO WebsiteUsers ( userName, pass, fullName, email ) VALUES 
                                                    ( :userName, :pass )");

            $sql->bindparam(":userName", $userName);
            $sql->bindparam(":pass", $pass);

            $sql->execute();

            return $sql;
        }
        catch(PDOException $e){
            echo "Error with data :". $e->getMessage();
        }
    }

    public function redirect($url){
        header("Location: $url");
    }

}

?>

dbconfig.php

<?php
$user = 'root';
$pass = '8169x5it';
try{
$con = new PDO('mysql:host=localhost; dbname=reg_form', $user, $pass);
}catch (PDOException $e){
    echo "POD Error :".$e->getMessage(); 
}
include_once 'class_reg.php';
$user = new Reg($con);
?>

为registration.php

<?php
require_once 'dbconfig.php';

if(isset($_POST['userName'])){
$form = $_POST;

//var_dump($_POST);

$userName = $form[ 'userName' ];
$pass = md5($form[ 'pass' ]);

if($user->registration($userName, $pass)){
    $user->redirect("all_users.php");
}else{
    echo "0";
}
}
?>

所以,它会将我重定向到我的文件&#39; all_users.php&#39;显示我插入数据库但数据未插入数据库的所有用户。你能告诉我在我的代码中我做错了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的大多数问题都已在评论中得到解答,但我会尝试总结并注意其他一些问题。

主要问题是@danronmoon上面的评论中提到的无效SQL您指定的列数与提供的值数不匹配。如果您没有输入全名和电子邮件值,请从插入中删除这些列规范。

如评论中所述,您在尝试使用bindParam()时也会输入拼写错误。

你看到&#34;正确的&#34;重定向行为是双重的:

我没有看到您将PDO对象实例配置为使用异常错误模式的位置,因此在出现错误时不会抛出异常。因此,不会触发异常处理程序

您从该方法返回应该是:

return $sql->execute();

return $sql;

因为$sql只是您的PDOStatement对象(假设您修复了上面的其他问题且prepare正常工作)。