Копиране на клас

teroristd каза:
Май и със другите функции ще трябват разни врътки като гледам :)
То най-трудното мина! Останалото са fetchRow fetchAll fetchObj, които са почти същите в mysqli, с google веднага излиза кое как се ползва.
Накрая остават само тези двете:
last insert id става return $db->insert_id
count rows става return $db->affected_rows
(тук са пропертита, а не методи)
 
Колеги то най-трудното мина ноооо при мен стана пълна каша с тез методи. Немога да се оправя с тях и да ги подкарам под MySQLi да са аналогични на тези...
PHP:
public function fetchAllAssoc() {
        return $this->STMT->fetchAll(\PDO::FETCH_ASSOC);
    }
    
    public function fetchRowAssoc() {
        return $this->STMT->fetch(\PDO::FETCH_ASSOC);
    }
    
    public function fetchAllNum() {
        return $this->STMT->fetchAll(\PDO::FETCH_NUM);
    }

    public function fetchRowNum() {
        return $this->STMT->fetch(\PDO::FETCH_NUM);
    }

    public function fetchAllObj() {
        return $this->STMT->fetchAll(\PDO::FETCH_OBJ);
    }

    public function fetchRowObj() {
        return $this->STMT->fetch(\PDO::FETCH_OBJ);
    }

    public function fetchAllColumn($column) {
        return $this->STMT->fetchAll(\PDO::FETCH_COLUMN, $column);
    }

    public function fetchRowColumn($column) {
        return $this->STMT->fetch(\PDO::FETCH_BOUND, $column);
    }

    public function fetchAllClass($class) {
        return $this->STMT->fetchAll(\PDO::FETCH_CLASS, $class);
    }

    public function fetchRowClass($class) {
        return $this->STMT->fetch(\PDO::FETCH_BOUND, $class);
    }

    public function getLastInsertId() {
        return $this->db->lastInsertId();
    }

    public function getAffectedRows() {
        return $this->STMT->rowCount();
    }
От прекалено многото инфо направо взех да пиша глупости. :o
 
dakata__92 каза:
От прекалено многото инфо направо взех да пиша глупости. :o

:D абе знам си аз че и с тях ще е разправия. Пусни един от методите как си го пробвал за да не си повтаряме глупостите :D :D :D
 
teroristd каза:
dakata__92 каза:
От прекалено многото инфо направо взех да пиша глупости. :o

:D абе знам си аз че и с тях ще е разправия. Пусни един от методите как си го пробвал за да не си повтаряме глупостите :D :D :D
PHP:
public function fetchAllAssoc(){
        return $this->STMT->fetch_assoc();
    }

Веднага ми тресна грешка:
Call to undefined method mysqli_stmt::fetch_assoc()

:D :D :D
 
Пробвай нещо подобно. Мисля си че е вързана работата със заявката.

Код:
public function numRows() {   
        $result = query($this->sql);
        return $this->STMT->mysqli_num_rows($result);
    }
 
Другото което ми хрумва е нещо такова.

Код:
public function fetchAllAssoc() {
        return $this->STMT->mysqli_result::fetch_all(MYSQLI_ASSOC);
    }
 
teroristd каза:
Пробвай нещо подобно. Мисля си че е вързана работата със заявката.

Код:
public function numRows() {   
        $result = query($this->sql);
        return $this->STMT->mysqli_num_rows($result);
    }
Ще го пробвам но защо си мисля, че е заради припеър стейтмъна. Явно ще трябва освен да биндвам параметрите а и резултата (bind_result). Сега разбирам защо PDO е по-добър варянт като цяло при връщане на резултат. По-бърз е.
 
По логиката на bind_param драснах и резултата но нещо немога да го навържа с execute и да е private.
PHP:
	private function bindResult(){
		$parameters = array();
		$results = array();
		$meta = $this->STMT->result_metadata();
 
		while( $field = $meta->fetch_field() ) {
			$parameters[] = &$row[$field->name];
		}
 
		call_user_func_array(array($this->STMT, 'bind_result'), $parameters);
 
		while($this->STMT->fetch()) {
			$x = array();
			foreach($row as $key => $val ) {
				$x[$key] = $val;
			}
 
			$results[] = $x;
		}
 
		print_r($results); 
    }
Eто така нещо сработи но уви вади само един резултат:

PHP:
public function fetchAllAssoc(){
		$result = $this->STMT->get_result();
        return $result->fetch_assoc();
    }
 
dakata__92 каза:
Eто така нещо сработи но уви вади само един резултат:

PHP:
public function fetchAllAssoc(){
		$result = $this->STMT->get_result();
        return $result->fetch_assoc();
    }
Ми що ползваш fetch_assoc? :D
Ползвай return $result->fetch_all()
http://php.net/manual/en/mysqli-result.fetch-all.php
 
Защото съм глупав. Правя нали съпоставка между PDO то и MySQLi и незнам. Можеш ли да ми помогнеш да ги подкарам тези методи да са аналогични на това което правят тези в ПДО тоест направо да си правят същото? Виждам, че разбираш и знам, че е малко много нагло да те моля, предвид помощтта която ми указа. Естествено съм благодарен и на останалите дали становища по темата. :?: :?:
 
Методите матчващи този израз: ^fetchAll(Num|Obj|Assoc)$ много лесно се превръщат в mysqli - http://php.net/manual/en/mysqli-result.fetch-all.php

Следващата група ^fetchRow(Num|Obj|Assoc)$ отговарят съответно на fetch_row, fetch_object и fetch_assoc.

Не разбирам кое е толкова сложно? С това досега мисля че можеш да се справиш. Останаха само fetch(All|Row)Column, които просто ако ми кажеш къде се ползват ще ти бъда благодарен :)
 
Ъъъъъ леко забих с приравняването на :
PDO
PHP:
public function fetchAllObj() {
        return $this->STMT->fetchAll(\PDO::FETCH_OBJ);
    }

MySQLi
PHP:
public function fetchAllObj() {
        $result = $this->getResult();
        return $result->fetch_object();
    }

Не успявам да уеднаквя изхода.

С тези също не успявам да се управя:
PHP:
public function fetchRowColumn($column) {
        return $this->STMT->fetch(\PDO::FETCH_BOUND, $column);
    }

    public function fetchAllClass($class) {
        return $this->STMT->fetchAll(\PDO::FETCH_CLASS, $class);
    }

    public function fetchRowClass($class) {
        return $this->STMT->fetch(\PDO::FETCH_BOUND, $class);
    }

    public function getLastInsertId() {
        return $this->db->lastInsertId();
    }

    public function getAffectedRows() {
        return $this->STMT->rowCount();
    }
 
Еми кво да ти кажа :D
getLastInsertId и getAffectedRows излизат веднага в гугъл, някъде по-горе май също ги постнах.
А сега:
* относно fetchAllObj - къде ще ти потрябва всички редове да ги пъхнеш в обект - просто не мога да си го представя :)
* относно fetchRowColumn - ако ти потрябва ще го вземеш от масива, върнат от fetchRowNum или fetchRowAssoc
* относно fetchRowClass - това не е ли същото като fetchRowObj
 
anonimen каза:
Еми кво да ти кажа :D
getLastInsertId и getAffectedRows излизат веднага в гугъл, някъде по-горе май също ги постнах.
А сега:
* относно fetchAllObj - къде ще ти потрябва всички редове да ги пъхнеш в обект - просто не мога да си го представя :)
* относно fetchRowColumn - ако ти потрябва ще го вземеш от масива, върнат от fetchRowNum или fetchRowAssoc
* относно fetchRowClass - това не е ли същото като fetchRowObj

Просто го копирах от PDO не съм трил getLastInsertId защото то си вади стойността. getAffectedRows е друга тема. PDO ми вади 7 а MySQLi -1
MySQLi:
PHP:
public function getAffectedRows() {
        return $this->db->affected_rows;
    }
fetchAllObj на PDO прилича на mysqli_result::fetch_fields но са различни.

Тоест става някакво мазало. Чудя се даже тези какво се предполага че връщат защото подавам някакъв клас и така нататък но ми вади некакви щуротии. Четох из нета но аналог не им намерих.

PHP:
public function fetchAllClass($class) {
        return $this->STMT->fetchAll(\PDO::FETCH_CLASS, $class);
    }

    public function fetchRowClass($class) {
        return $this->STMT->fetch(\PDO::FETCH_BOUND, $class);
    }

За fetchAllColumn($column) няма ли начин да е като при PDO подобно? Не ми се върти цикъл да върна всяка една стойност на дадена колона.
 
getAffectedRows
отговаря на mysqli_num_rows

lastInsertId
отговаря на insert_id

за тези fetchAllClass може би
mysqli_fetch_object()
 
teroristd каза:
getAffectedRows
отговаря на mysqli_num_rows

lastInsertId
отговаря на insert_id

за тези fetchAllClass може би
mysqli_fetch_object()
PDO ми вади 5 а MySQLi 0 при getAffectedRows.
Ката тествам и двете със Селект.
PHP:
$sql = $db->prepare('SELECT * FROM `user`')->execute()->getAffectedRows();
 
teroristd каза:
пробвай с mysqli_num_rows() и няма да има разлика
Използвал съм стейтмъна вместо резултата затова идва грешката.
PHP:
public function getAffectedRows(){
		$result = $this->getResult();
        return $result->num_rows;
    }
 

Back
Горе