Php 对成员函数count()的调用
我收到一个“调用成员函数count()”错误。我尝试过各种方法来解决这个问题,但现在我被卡住了 问题在于:Php 对成员函数count()的调用,php,mysql,Php,Mysql,我收到一个“调用成员函数count()”错误。我尝试过各种方法来解决这个问题,但现在我被卡住了 问题在于: var_dump($data, $field); if($user->count()) { $this->_data = $data->first(); 这是我的密码: class user { private $_db, $_data; public function __construct($user = null) {
var_dump($data, $field);
if($user->count()) {
$this->_data = $data->first();
这是我的密码:
class user {
private $_db,
$_data;
public function __construct($user = null) {
$this->_db = DB::getInstance();
}
public function create($fields = array()) {
if(!$this->_db->insert('users', $fields)) {
throw new exception('There was a problem creating an account.');
}
}
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$data = $this->_db->get('users', array($field, ' = ', $user));
var_dump($data, $field);
if($user->count()) {
$this->_data = $data->first();
return true;
}
}
return false;
}
public function login($username = null, $password = null) {
$user = $this->find($username);
if($user) {
if($this->data()->password === hash::make($password, $this->data()->$salt)) {
echo 'OK!';
}
}
return false;
}
private function data() {
return $this->_data;
}
}
classdb{
私有静态$\u实例=null;
私人$(pdo),
$\u查询,
$\u错误=false,
$\u结果,
$\计数=0;
私有函数_u构造(){
试一试{
$this->_pdo=new pdo('mysql:host='.Config::get('mysql/host')。;dbname='.Config::get('mysql/db'),''.Config::get('mysql/username'),''.Config::get('mysql/password');
回声“连接”;
}捕获(PDO$e){
死亡($e->getMessage());
}
}
公共静态函数getInstance(){
if(!isset(self:$\实例)){
self::$_instance=new DB();
}
返回self::$\u实例;
}
公共函数查询($sql,$params=array()){
$this->_error=false;
如果($this->_query=$this->_pdo->prepare($sql)){
$x=1;
如果(计数($params)){
foreach($params作为$param){
$this->_query->bindValue($x,$param);
$x++;
}
}
如果($this->\u query->execute()){
$this->\u results=$this->\u query->fetchAll(PDO::FETCH\u OBJ);
$this->_count=$this->_query->rowCount();
}否则{
$this->_error=true;
}
}
退还$this;
}
私有函数action($action,$table,$where=array()){
如果(计数($where)==3){
$operators=array(“=”、“>”、“=”、“如果此代码:
$field = (is_numeric($user)) ? 'id' : 'username';
指示$user
有时可能不是对象,为什么要无条件地执行此操作
if($user->count()) {
哪项要求$user
始终是一个对象?编辑:
您在调用$this->\u db->get时使用了错误的运算符。您传入了“=”,但可接受的运算符是“=”(没有空格)。这与下面的建议相结合将解决您的问题
看起来您需要$data->count()
而不是$user->count()
您应该使用更好的变量名,在实际值不是用户对象的几个地方使用$user
公共函数find($user=null){
这是一个数字或字符串,请尝试
公共函数find($queryParam=null){
$user=$this->find($username);
这是一个布尔值,请尝试
$userFound=$this->find($username)
您的query
方法使用上次执行的查询的计数更新属性$\u count
。您有一个公共方法来访问此属性;count()
。您的数据库类对象保存在属性\u db
中。因此,我们可以执行以下操作:
if($this->_db->count()) {
$this->_data = $data->first();
$user是(名称不正确的)方法参数,与调用find的对象($this)不同。此外,这不是一个答案。抱歉,粘贴了错误的方法调用。OP之后有$user->count()
。感谢您的快速响应,但是($data->count())也不起作用。$data在我的变量转储中返回false。仍然感到困惑。我也将尝试这些其他建议。@RubiRed我已经更新了我的答案,如果$success为false,则您的查询没有正确执行,在这种情况下,您需要进一步调试它。@RubiRed我再次查看了这个问题,发现您在中使用了错误的运算符您的get查询,请参阅上面的“编辑我的答案”。在这种情况下,这是一个错误的答案,因为这将返回上次运行查询的计数。由于使用了错误的运算符,因此该查询永远不会运行。
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$data = $this->_db->get('users', array($field, '=', $user));
if($data && $data->count() > 0) {
$this->_data = $data->first();
return true;
}
}
return false;
}
if($this->_db->count()) {
$this->_data = $data->first();