Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入PDO故障_Php_Mysql_Pdo - Fatal编程技术网

Php 插入PDO故障

Php 插入PDO故障,php,mysql,pdo,Php,Mysql,Pdo,好的,我刚开始一个项目,我正在创建站点的成员部分。到目前为止,我有两个类,一个用于数据库,另一个用于管理用户,它们是: class dbConnect { protected $db_conn; public $db_name = 'todo'; public $db_user= 'root'; public $db_pass = 'pass'; public $db_host = '127.0.0.1'; function connect()

好的,我刚开始一个项目,我正在创建站点的成员部分。到目前为止,我有两个类,一个用于数据库,另一个用于管理用户,它们是:

class dbConnect
{
    protected $db_conn;
    public $db_name = 'todo';
    public $db_user= 'root';
    public $db_pass = 'pass';
    public $db_host = '127.0.0.1';

    function connect()
    {
        try
        {
            $this->db_conn = new PDO("mysql:host=$this->db_host;dbname = $this->db_name",$this->db_user,$this->db_pass);
            return $this->db_conn;
        }
        catch(PDOException $e)
        {
            return $e->getMessage();
        }
    }
}
这是用户类

class ManageUsers
{
    public $link;

    function __construct()
    {
        $db_connection = new dbConnect();
        $this->link = $db_connection->connect();
        return $this->link;
    }

    function registerUsers($username,$pass,$ip_adress,$time,$date)
    {
        $query = $this->link->prepare("INSERT INTO `users` (username, password, ip_adress, time, date_joined) VALUES (?,?,?,?,?)");
        $values = array($username,$pass,$ip_adress,$time,$date);
        $query->execute($values);
        $counts = $query->rowCount();
        return $counts;
    }
}

$users = new ManageUsers();
echo $registered = $users->registerUsers('bob','marley','127.0.0.1','12:00','29-02-2012');
include_once('class.db.php');

class ManageUsers
{
  public $link;

  function __construct()
  {
    $db_connection = new dbConnect();
    $this->link = $db_connection->connect();
    return $this->link;
  }

  function registerUsers($username,$email,$password,$ip_adress,$date)
  {
    $query = $this->link->prepare("INSERT INTO `users` (username,email, password, ip_adress, date_joined)  VALUES(?,?,?,?,?)");
    $values = [$username,$email,$password,$ip_adress,$date];
    $query->execute($values);
    $confirm = $query->rowCount();
    return $confirm;
  }

  function loginUser
}

$test = new ManageUsers();
echo $test->registerUsers('bob','a@a.com','lol','127.0.0.1','2012');

现在我遇到的问题是,它没有将数据插入到我三次检查过的数据库中,数据库中的表与查询匹配,因此可能是语法上的问题。该函数运行时没有错误,返回0而不是1。好的,谢谢你的帮助,别着急,这里有几个明显的问题:

  • 您的问题是没有正确配置PDO驱动程序
当SQL命令/查询失败时,最好停止执行。为了激活它,您需要定义相应的驱动程序选项
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION

  • 您的
    dbConnect
    类没有意义
首先,您正在连接到
MySQL
服务器,因此最好以某种方式指示它。而且,由于您的
dbConnect
是数据库连接的逻辑部分,因此这不是一个好办法。相反,应该扩展该类(因为它满足
is-a
关系)

因此,您可以编写一个特定于MySQL PDO的类,如下所示:

class MySQL_PDO extends PDO
{
    public function __construct(array $params)
    {
        $dsn = 'mysql:host=' . $params['host'];

        if (isset($params['dbname'])) {
            $dsn .= ';dbname=' . $params['dbname'];
        }

        $options = array(
            parent::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
            parent::ATTR_ERRMODE            => parent::ERRMODE_EXCEPTION,
            parent::ATTR_EMULATE_PREPARES   => false,
            parent::ATTR_DEFAULT_FETCH_MODE => parent::FETCH_ASSOC,
        );

        parent::__construct($dsn, $params['username'], $params['password'], $options);
    }
}
你可以像这样初始化它

$db_options = array(
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => '',
  'dbname'   => 'todo'
);

$pdo_driver = new MySQL_PDO($db_options);
您的
ManageUsers
实际上是的一个实现,应该适当地利用它

另外,请注意,
time
在MySQL中是一个保留字,因此您最好在任何地方都使用反勾号

class UserMapper
{
   protected $pdo;

   public function __construct($pdo)
   {
      $this->pdo = $pdo;
   }

   public function insert($username, $password, $ip_adress, $time, $date_joined)
   {
       $query = "INSERT INTO `users` (`username`, `password`, `ip_adress`, `time`, `date_joined`) VALUES (:username, :password, :ip_adress, :time)"

       $stmt = $this->pdo->prepare($query);
       return $stmt->execute(array(
           ':username'   => $username,
           ':password'   => $password,
           ':ip_adress'  => $ip_adress,
           ':date_joined'=> $date_joined
       ));
   }
}
最后,你可以全部使用,就像:

$mapper = new UserMapper($pdo_driver);
$mapper->insert('foo', .....);

这是工作代码

class dbConnect
{
  protected $db_conn;
  public $db_host = '127.0.0.1';
  public $db_user = 'root';
  public $db_pass = 'roadmin';
  public $db_name = 'todo';

  public function connect()
  {
    try
    {
      $this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", $this->db_user,$this->db_pass);
      return $this->db_conn;
    }
    catch(PDOException $e) 
    {
      return $e->getMessage();
    }
  }

}
这是ManageUsers类

class ManageUsers
{
    public $link;

    function __construct()
    {
        $db_connection = new dbConnect();
        $this->link = $db_connection->connect();
        return $this->link;
    }

    function registerUsers($username,$pass,$ip_adress,$time,$date)
    {
        $query = $this->link->prepare("INSERT INTO `users` (username, password, ip_adress, time, date_joined) VALUES (?,?,?,?,?)");
        $values = array($username,$pass,$ip_adress,$time,$date);
        $query->execute($values);
        $counts = $query->rowCount();
        return $counts;
    }
}

$users = new ManageUsers();
echo $registered = $users->registerUsers('bob','marley','127.0.0.1','12:00','29-02-2012');
include_once('class.db.php');

class ManageUsers
{
  public $link;

  function __construct()
  {
    $db_connection = new dbConnect();
    $this->link = $db_connection->connect();
    return $this->link;
  }

  function registerUsers($username,$email,$password,$ip_adress,$date)
  {
    $query = $this->link->prepare("INSERT INTO `users` (username,email, password, ip_adress, date_joined)  VALUES(?,?,?,?,?)");
    $values = [$username,$email,$password,$ip_adress,$date];
    $query->execute($values);
    $confirm = $query->rowCount();
    return $confirm;
  }

  function loginUser
}

$test = new ManageUsers();
echo $test->registerUsers('bob','a@a.com','lol','127.0.0.1','2012');

您是从两个不同的文件调用这两个类,还是在同一个文件中调用这两个类?虽然是单独的,但我在manageusers中包含了dbconnect类class@Fred-ii-包括_once'class.db.php'@Fred ii-当我运行它时,它返回的结果为零,因此它工作正常查看日志文件和/或使用
$query->errorInfo()
响应上一个数据库错误谢谢你的建议,我对代码做了一些更改,它工作正常