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驱动程序
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()
响应上一个数据库错误谢谢你的建议,我对代码做了一些更改,它工作正常