Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Старый запрос в новую


Автор: ekodrive 7.9.2015, 14:06
Добрый день друзья вот имеется такой код. 
Код

class DB {
    var $result;
    function query($var){
        $this->result = mysql_query($var);
        return $this->result;
    }
    function fetchArray($result = ''){
        if($result == ''){
            $result = $this->result;
        }
        return mysql_fetch_array($result);
    }
    function numRows($result = ''){
        if($result == ''){
            $result = $this->result;
        }
        return mysql_num_rows($result);
    }
    }
$db = new DB();

хочу изменить и использовать pdo но в fetcharray функция затрудняеть ситуацию

Код

class DB {
    var $result;
    function query($var){
        $baza = new PDO('loclhost;dbname=test_host', 'test', 'password');
        $sql  = "SELECT * FROM users";
        $stmt = $baza->prepare($sql);
        $baza->exec("set names utf8");    
        $this->result = $stmt->execute();
        return $this->result;
    }
    function fetchArray($result = ''){
        if($result == ''){
            $result = $this->result;
        }
        return mysql_fetch_array($result);
    }
    function numRows($result = ''){
        if($result == ''){
            $result = $this->result;
        }
        return mysql_num_rows($result);
        }
}
$db = new DB();

Автор: ksnk 7.9.2015, 18:01
А в чём проблема-то? Сохранить старый интерфейс?

Конструктор в объект добавить можно? В него и надо перенести инициализацию самого PDO.

Автор: baldina 7.9.2015, 18:48
Код

class DB {
    private $pdo, $stmt;

    function __construct ($host, $dbname, $user, $pass) {
        $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", 
                                            $user, $pass, 
                                            [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"]);
    }
    function query($sql){
        $this->stmt = $this->pdo->prepare($sql);
        $this->stmt->execute();
    }
    function fetchArray(){
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC) ;
    }
    function numRows(){
        return $this->stmt->rowCount();
    }
}

Автор: ekodrive 8.9.2015, 09:38
baldina,  спасибо  огромное но почему то не работает но я уверен логика есть  вот код 


classes.php
Код

class DB {
    private $pdo, $stmt;
    function __construct ($host, $dbname, $user, $pass) {
        $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", 
                                            $user, $pass, 
                                            [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"]);
    }
    function query($sql){
        $this->stmt = $this->pdo->prepare($sql);
        $this->stmt->execute();
    }
    function fetchArray(){
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC) ;
    }
    function numRows(){
        return $this->stmt->rowCount();
    }
}
$db = new DB();

index.php
Код

include("data/classes.php");
$res_title = $db->query("SELECT*FROM  settings WHERE name='sitename'");
$num_title = $db->numRows();
if($num_title>0){
    $row_title = $db->fetchArray();
    $site_title = $row_title['title_'.$lg];
    $site_keywords = $row_title['keywords'];
}

Автор: ekodrive 8.9.2015, 10:09
Все получилось проблема была 

Код

  function fetchArray(){
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC) ;
    }


почему то должен быть не fetchAll а fetch.
Код

  function fetchArray(){
        return $this->stmt->fetch(PDO::FETCH_ASSOC) ;
    }


Спасибо огромное
baldina, 

Автор: baldina 8.9.2015, 10:31
ekodrive, по логике должен быть fetchAll а не fetch, просто вы его неправильно используете

Код

$db->query("SELECT*FROM  settings WHERE name='sitename'");
$rows = $db->fetchArray();
if (count($rows) > 0) {
  $row_title = $rows[0];
}
else {
  // no records
}

или
Код

$db->query("SELECT*FROM  settings WHERE name='sitename'");
foreach ($db->fetchArray() as $row)
  echo $row['keywords'];

использовать numRows сомнительно, не обязательно будет работать на select запросах (а нужен на запросах изменения)

Добавлено через 2 минуты и 50 секунд
впрочем нет, у вас в mysql_ тоже был fetch, так что вы правы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)