php pdo保存查询数据
第29-32行php pdo保存查询数据,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,第29-32行 : Call to a member function rowCount() on a non-object in C:\wamp\www\prjy\classes\user.php on line 34 第34行 $this->sth = $this->dbh->prepare("SELECT id, userlevel FROM users WHERE username = ? AND password = ?"); $this->sth->b
: Call to a member function rowCount() on a non-object in C:\wamp\www\prjy\classes\user.php on line 34
第34行
$this->sth = $this->dbh->prepare("SELECT id, userlevel FROM users WHERE username = ? AND password = ?");
$this->sth->bindParam(1, $username);
$this->sth->bindParam(2, $password);
$this->data = $this->sth->execute();
我想将结果对象保存在另一个变量中,以便执行另一个查询,并根据结果返回正确的结果。。。我不能将结果(execute())保存在上述变量中吗?我该如何以其他方式解决它
PDOStatement::rowCount()
返回由相应PDOStatement对象执行的最后一个删除、插入或更新语句所影响的行数
对于大多数数据库,PDOStatement::rowCount()
不返回受影响的行数
通过选择语句。相反,
使用PDO::query()
发出一个SELECT COUNT(*)
语句,该语句的谓词与预期的SELECT语句相同,
然后使用PDOStatement::fetchColumn()
检索将返回的行数
PDOStatement::rowCount()
返回由相应PDOStatement对象执行的上一个删除、插入或更新语句影响的行数
对于大多数数据库,PDOStatement::rowCount()
不返回受影响的行数
通过选择语句。相反,
使用PDO::query()
发出一个SELECT COUNT(*)
语句,该语句的谓词与预期的SELECT语句相同,
然后使用PDOStatement::fetchColumn()
检索将返回的行数
如何使用:
if ($this->data->rowCount() > 0)
对于行计数?如何使用:
if ($this->data->rowCount() > 0)
对于行计数?在调用rowCount()之前,必须执行另一个测试:
在调用rowCount()之前,必须执行另一个测试:
);返回一个布尔值
大约;文件还说:
如果关联的PDO语句执行的最后一条SQL语句为
对于SELECT语句,某些数据库可能返回行数
由该声明返回。然而,这种行为不能保证
适用于所有数据库,不应依赖于
应用程序
看到您正在使用MySQL,这将起作用,但请记住,这可能因此无法移植到其他s
如果不考虑可移植性,PDOStatement::rowCount()
是您所需要的,因此您需要使用:
if($this->sth->rowCount()>0)
但是,您需要保存多个PDOStatement
对象。因此,我建议采取如下措施:
$this->sth = $this->dbh->prepare("SELECT id, userlevel FROM users WHERE username = ? AND password = ?");
$this->sth->bindParam(1, $username);
$this->sth->bindParam(2, $password);
if($this->data = $this->sth->execute()) {
if ($this->data->rowCount() > 0) {
// do something here ..
}
}
或者类似性质的东西,取决于您希望得到其中一条语句的结果的标准
注:但要注意,为了使其工作,您必须激活(如果尚未激活):
);返回一个布尔值
大约;文件还说:
如果关联的PDO语句执行的最后一条SQL语句为
对于SELECT语句,某些数据库可能返回行数
由该声明返回。然而,这种行为不能保证
适用于所有数据库,不应依赖于
应用程序
看到您正在使用MySQL,这将起作用,但请记住,这可能因此无法移植到其他s
如果不考虑可移植性,PDOStatement::rowCount()
是您所需要的,因此您需要使用:
if($this->sth->rowCount()>0)
但是,您需要保存多个PDOStatement
对象。因此,我建议采取如下措施:
$this->sth = $this->dbh->prepare("SELECT id, userlevel FROM users WHERE username = ? AND password = ?");
$this->sth->bindParam(1, $username);
$this->sth->bindParam(2, $password);
if($this->data = $this->sth->execute()) {
if ($this->data->rowCount() > 0) {
// do something here ..
}
}
或者类似性质的东西,取决于您希望得到其中一条语句的结果的标准
注:但要注意,为了使其工作,您必须激活(如果尚未激活):
您没有测试错误<代码>PDOStatement::execute()
在出现错误时返回false
。你应该测试一下
$db = new PDO(
'dsn connection string',
'username',
'password',
array( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true )
);
或者类似的东西。这可能就是原因。您没有测试错误<代码>PDOStatement::execute()
在出现错误时返回false
。你应该测试一下
$db = new PDO(
'dsn connection string',
'username',
'password',
array( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true )
);
或者类似的东西。这可能就是原因。我相信它返回一个布尔值,这就是为什么你不能按你使用它的方式使用它。我相信它返回一个布尔值,这就是为什么你不能按你使用它的方式使用它。我应该用什么来选择?rowCount不过现在对我有效,我只需要更改变量。这样使用它“不好”吗?我宁愿用2条sql语句,然后用4条来检查用户是否可以登录。好吧,那太糟糕了。。。。说真的,我只是放弃了对PDO的兴趣。。不管怎样,谢谢。我应该用什么来选择?行计数现在对我有效,我只需要更改变量。这样使用它“不好”吗?我宁愿用2条sql语句,然后用4条来检查用户是否可以登录。好吧,那太糟糕了。。。。说真的,我只是放弃了对PDO的兴趣。。无论如何,谢谢。