Мэтт правильный ;PDOStatement::execute()
возвращает логическое значение.
А ДиЭхо частично правильно о PDOStatement::rowCount()
;в документах также говорится:
Если последний оператор SQL, выполненный связанным PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором.Однако такое поведение не гарантируется для всех баз данных и не следует полагаться на переносимые приложения.
Если вы используете MySQL, будет работать , но имейте в виду, чтопоэтому он не может быть переносим на другие СУБД с.
Если переносимость не имеет значения, PDOStatement::rowCount()
- это то, что вам нужно, и для этого вам нужно использовать это:
if ($this->sth->rowCount() > 0)
Однако вам нужно сохранить несколько PDOStatement
объектов.Поэтому я предлагаю сделать что-то вроде следующего:
$stmt1 = $this->dbh->prepare( /* first select statement */ );
$stmt1->bindParam(1, $username);
$stmt1->bindParam(2, $password);
$stmt2 = $this->dbh->prepare( /* second select statement */ );
$stmt2->bindParam(1, $username);
$stmt2->bindParam(2, $password);
if( $stmt1->execute() && $stmt2->execute() )
{
if( $stmt1->rowCount() > 0 )
{
$result = $stmt1->fetchAll();
}
else if( $stmt2->rowCount() > 0 )
{
$result = $stmt2->fetchAll();
}
}
или что-то похожее, в зависимости от того, по каким критериям вы хотите получить результаты одного из утверждений.однако помните, что для того, чтобы это работало, вам нужно активировать буферизованных запросов для MySQL в PDO (если это еще не было активировано):
$db = new PDO(
'dsn connection string',
'username',
'password',
array( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true )
);