我有文件' class_reg.php'包含课程' Reg'以及一些方法注册'在其中,它返回一些输入值并通过PDO将其插入数据库。我有' dbconfig.php'文件,我连接到数据库,包括我的' class_reg.php'文件并创建对象' $ user'。我有一些注册.php'我包含的文件' dbconfig.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");
}
}
?>
<?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);
?>
<?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;显示我插入数据库但数据未插入数据库的所有用户。你能告诉我在我的代码中我做错了什么吗?提前谢谢!
答案 0 :(得分:0)
您的大多数问题都已在评论中得到解答,但我会尝试总结并注意其他一些问题。
主要问题是@danronmoon上面的评论中提到的无效SQL您指定的列数与提供的值数不匹配。如果您没有输入全名和电子邮件值,请从插入中删除这些列规范。
如评论中所述,您在尝试使用bindParam()
时也会输入拼写错误。
你看到&#34;正确的&#34;重定向行为是双重的:
我没有看到您将PDO对象实例配置为使用异常错误模式的位置,因此在出现错误时不会抛出异常。因此,不会触发异常处理程序
您从该方法返回应该是:
return $sql->execute();
不
return $sql;
因为$sql
只是您的PDOStatement对象(假设您修复了上面的其他问题且prepare
正常工作)。