При разработке сайта мне потребовалось получить из таблице 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 : код не мой. взят с этого сайта Клик
Полученные данные это же массив,
$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;
Надеюсь стало понятней или я еще больше запутал
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как я могу получить картинку и текст из файлаdocx с помощью библиотеки PHPWord? Так и не смог найти ничего вразумительного
Делаю подстановку данных клиента в шаблон документа используябиблиотеку phpwordВсе делаю по примеру