【问题标题】:object oriented php code Error面向对象的php代码错误
【发布时间】:2017-07-05 12:05:21
【问题描述】:
// connection.php file 

<?php


class Connection{

   private $host;
   private $username;
   private $password;
   private $database;

   public function __construct($host,$username,$password,$database)
   {
     try{
     $conn = new PDO("mysql:host=".$host.";dbname=".$database, $username, $password);
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     return $conn;
     }catch(PDOException $e)
     {
        return $e->getMessage();
     }
   }

}

?>

// user.php

<?php

class Users extends Connection{

  private $username;
  private $email;
  private $password;

  public function __construct($username,$email,$password){

    $this->username=$username;
    $this->email=$email;
    $this->password=$password;

  }

  public function addUser(){
    $conn = new Connection("localhost","root","","userdata");
    echo "database connection established";
    die();
    $sql = $conn->prepare("INSERT INTO information (UserName, Email, Password) VALUES (?, ?, ?)");
    $conn->bind_param("sss", $username, $email, $password);
    $username=this->username;
    $password=this->password;
    $email=this->email;
    $sql->execute();

    echo "New records created successfully";

    $sql->close();
    $conn->close();

  }
}

?>

process.php

<?php

include('lib/connection.php');

if(isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password']))
{
  $user = new User("Gautam","gautam@mail.com","123456");
  $user->addUser();
}

?>

所以问题当我尝试执行 process.php 文件时,记录没有添加到数据库中。所以我已经单独创建了连接类,我已经在其中编写了数据库连接的逻辑,然后我将该类继承给了用户我将用户添加到数据库中,然后我在 process.php 中调用了用户类的对象,但记录没有添加到数据库中。请说明与之相关的问题。

【问题讨论】:

  • 可以添加这个错误信息吗?
  • 显示bind_param方法的实现。
  • “请说明问题所在”确实。
  • 此代码未运行我无法将用户添加到数据库
  • 可能因为这行 echo "database connection established";死();删除这个 die();

标签: php mysql pdo


【解决方案1】:

你的代码的问题是你在执行之前没有绑定任何参数。

检查这些行:

$sql = $conn->prepare()
$conn->bind_param("sss", $username, $email, $password);

这一行应该是$sql-&gt;bind_param("sss", $username, $email, $password);

还要注意 PDO 没有 bind_param() 功能:bindParam()

所以你需要

    $sql->bindParam(1, $this->username);
    $sql->bindParam(2, $this->email);
    $sql->bindParam(3, $this->password);

下面的代码应该可以工作:

<?php

class Users extends Connection
{

    private $username;
    private $email;
    private $password;

    public function __construct($username, $email, $password)
    {
        $this->username = $username;
        $this->email    = $email;
        $this->password = $password;

    }

    public function addUser()
    {
        $conn = new Connection("localhost", "root", "", "userdata");
        echo "database connection established";

        $username = $this->username;
        $password = $this->password;
        $email    = $this->email;



        $sql = $conn->prepare("INSERT INTO information (UserName, Email, Password) VALUES (?, ?, ?)")->execute(array($username,$email,$password));

        if (!$sql) {

            print_r("error : " . $conn->errorInfo());
        } else {

            echo "New records created successfully";
        }
        $sql->close();
        $conn->close();
    }
}

?>

PS:不要以纯文本形式存储密码,请使用 php 内置函数,例如 password_hash()password_verify() 来准备你的密码。

【讨论】:

    【解决方案2】:

    首先在你的类中使用 $this 而不是 this,其次你调用了错误的类名 User,它是用户,请修改并尝试,应该可以。

    $user = new Users("Gautam","gautam@mail.com","123456");
    

    在你的用户类的 adduser 函数中

    $username=$this->username;
    $password=$this->password;
    $email=$this->email;
    

    如上更改,它应该可以工作..

    【讨论】:

    • 还有一件事,把这条线放在类似 echo "database onnection established" 的条件下;死();
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多