Как получить число строк из бд на PDO

199
24 января 2018, 16:37

При разработке сайта мне потребовалось получить из таблице content число строк где user_id = $_SESSION['user_id']. Я знаю как выглядит запрос при использовании mysqli_query

$db_con  = @new mysqli( 'localhost',  'root', '',  'ImgBox_db' );
$user_id = $_SESSION['user_id'];
$user_content_id = "SELECT COUNT(user_id) FROM content WHERE user_id = '$user_id'";
$count  =  mysqli_query( $db_con,  $user_content_id );

но я не понимаю как сделать такое же на PDO. нагуглил вот что

$count=$dbh->query("SELECT COUNT(user_id) FROM content WHERE user_id = '$user_id'")->fetchColumn();

но как я понял что в переменную $dbh прописано подключение к бд. у меня оно осуществляется вот так.

public function connectdb($db_name, $db_user, $db_pass, $db_host = "localhost")
{
    try {
        $this->db = new \pdo("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    } catch (\pdoexception $e) {
        echo "database error: " . $e->getmessage();
        die();
    }
    $this->db->query('set names utf8');
    return $this;
}

и я не понимаю что писать в место $dbh. если что то не так я понял прошу исправить меня.

P.s : код не мой. взят с этого сайта Клик

Answer 1

Полученные данные это же массив,

$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
$len = count( $result ) 

Или же если в бд сделать count(*)

На w3s вроде поробно показывают как делать запрос с pdo https://www.w3schools.com/php/php_mysql_select.asp

Хорошо, тогда дополняю С w3s код

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests"); 
    $stmt->execute();
    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

$conn думаю понятно, соединился параметр ERRMODE_EXCEPTION выдает ошибки, которые отлавливаются

http://php.net/manual/ru/pdo.setattribute.php

$prepare подготовил запрос

$execute ты его выолнил

$fetch ты его получил параметр PDO::FETCH_ASSOC делает ассоциативный массив с индексацией

http://php.net/manual/ru/pdostatement.fetch.php

Ссылки на мануале описаны все виды ошибок, которые возможны

Вот код, который обычно использую чтобы каждый раз не писать

<?php
abstract class Model {
  protected $dbh;
  protected $stmt;
  public function __construct() {
    $this->dbh = new PDO("mysql:host=" . DB_HOST .
    ";dbname=" . DB_NAME,
     DB_USER , DB_PASS);
  }
  public function query($query){
    $this->stmt = $this->dbh->prepare($query);
  }
  public function bind($param, $value, $type = null) {
    if(is_null($type)) {
      switch (true) {
        case is_int($value):
          $type = PDO::PARAM_INT;
          break;
        case is_bool($value):
          $type = PDO::PARAM_BOOl;
          break;
        case is_null($value):
          $type = PDO::PARAM_null;
          break;
        default:
          $type = PDO::PARAM_STR;
          break;
      }
    }
    $this->stmt->bindValue($param, $value, $type);
  }
  public function execute() {
    $this->stmt->execute();
  }
  public function resultSet() {
    $this->stmt->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
  }
  public function lastInsertId() {
    return $this->dbh->lastInsertId();
  }
  public function single(){
    $this->execute();
    return $this->stmt->fetch(PDO::FETCH_ASSOC);
  }
}

После просто

$this->query('SELECT * FROM somebd');
$rows = $this->resultSet();
return $rows;

Надеюсь стало понятней или я еще больше запутал

READ ALSO
Зачем нужны интерфейсы в PHP? [дубликат]

Зачем нужны интерфейсы в PHP? [дубликат]

На данный вопрос уже ответили:

180
Как получить текст и картинку, из файла .docx с помощью PHPWord?

Как получить текст и картинку, из файла .docx с помощью PHPWord?

Как я могу получить картинку и текст из файлаdocx с помощью библиотеки PHPWord? Так и не смог найти ничего вразумительного

186
Подстановка в шаблон Word проблема с ZipArchive

Подстановка в шаблон Word проблема с ZipArchive

Делаю подстановку данных клиента в шаблон документа используябиблиотеку phpwordВсе делаю по примеру

164