Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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_Sql_Pdo - Fatal编程技术网

php pdo保存查询数据

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

第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->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的兴趣。。无论如何,谢谢。