Кaквa е рaзликaтa между тези функции ? (mysql)

dmx_cs_manqka

Registered
Здрaвейте!
Кaквa е рaзшикaтa между mysql_fetch_array(), mysql_num_rows() и mysql_fetch_assoc() (третaтa не съм сигурен дaли тaкa се пишеше) ?
 
mysql_fetch_assoc - връща асоциативен масив

mysql_fetch_array - като mysql_fetch_assoc, но добавя всеки запис по 2 пъти в масива с ключ и число

mysql_num_rows() - връща броя на редовете

mysql_fetch_assoc е по-бърз от mysql_fetch_array.

mysql_fetch_array, тук не е нужно предварително да се знаят полетата:
Код:
$rows = mysql_fetch_array( "select name, address from people");
foreach( $rows as $row )
echo $row[0] . ' lives at ' . $row[1] ;
mysql_fetch_assoc, тук вече трябва да се знаят полетата в базата, които ще се извеждат.
Код:
$rows = mysql_fetch_assoc( "select name, address from people");
foreach( $rows as $row )
echo $row['name'] . ' lives at ' . $row['address'];
Нека някой да добави или да ме коригира ако нещо съм сбъркал :?:
 
Много полезен съвет: Научи се да използваш Гугъл :) Колкото и банално да звучи.

http://bg.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D0%B8%D0%B2_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D0%BD%D0%B5%29#.D0.9C.D0.B0.D1.81.D0.B8.D0.B2.D0.B8_.D0.B2_PHP
 
Код:
// Асоциативен масив
	$arrAsociative = array('key_0' => 'value_0', 'key_1' => 'value_1', 'key_2' => 'value_2',);
	print_r($arrAsociative);

	/*
	Array
	(
	    [key_0] => value_0
	    [key_1] => value_1
	    [key_2] => value_2
	)

	асоциативен масив е този който задаваш стойности на ключовете ;)
	*/
	
	//Просто масив
	
	$arrAsociative = array( 'value_0', 'value_1', 'value_2',);
	print_r($arrAsociative);
	/*
	Array
	(
	    [0] => value_0
	    [1] => value_1
	    [2] => value_2
	)

	обикновенния масив е този който ключовете биват добавяни от PHP то за най-лесно ;)
	*/

	//Многомерен масив
	$arrAsociative = array( 
		array( 'value_0', 'value_1', 'value_2',), 
		array( 'value_0', 'value_1', 'value_2',),
		array( 'value_0', 'value_1', 'value_2',),
		);
	print_r($arrAsociative);

	/*
	Array
	(
	    [0] => Array
	        (
	            [0] => value_0
	            [1] => value_1
	            [2] => value_2
	        )

	    [1] => Array
	        (
	            [0] => value_0
	            [1] => value_1
	            [2] => value_2
	        )

	    [2] => Array
	        (
	            [0] => value_0
	            [1] => value_1
	            [2] => value_2
	        )

	)
	
	многомерен масив е този който всичките му стойности са масиви с еднаква дължина ;)
	имаше и разни други детайли но сега не си спомням...
	*/
 
vinsbg каза:
mysql_fetch_assoc - връща асоциативен масив

mysql_fetch_array - като mysql_fetch_assoc, но добавя всеки запис по 2 пъти в масива с ключ и число

mysql_num_rows() - връща броя на редовете

mysql_fetch_assoc е по-бърз от mysql_fetch_array.

mysql_fetch_array, тук не е нужно предварително да се знаят полетата:
Код:
$rows = mysql_fetch_array( "select name, address from people");
foreach( $rows as $row )
echo $row[0] . ' lives at ' . $row[1] ;
mysql_fetch_assoc, тук вече трябва да се знаят полетата в базата, които ще се извеждат.
Код:
$rows = mysql_fetch_assoc( "select name, address from people");
foreach( $rows as $row )
echo $row['name'] . ' lives at ' . $row['address'];
Нека някой да добави или да ме коригира ако нещо съм сбъркал :?:

Разликата между mysql_fetch_array() и mysql_fetch_assoc() е че при array() ключовете са числа 0,1,2,3,4... а при assoc ключовете носят имената на колоните от таблицата и такова нещо като добавяне два пъти няма ;)
 
stankata90 каза:
Разликата между mysql_fetch_array() и mysql_fetch_assoc() е че при array() ключовете са числа 0,1,2,3,4... а при assoc ключовете носят имената на колоните от таблицата и такова нещо като добавяне два пъти няма ;)
array() - Fetch a result row as an associative array, a numeric array, or both
 
Питаш за разликата? => си мислиш, че правят едно и също. Провери в http://php.net/име_на_функция , някои страници са преведени дори на български.

Ето един пример:
PHP:
$query = "select id, name from table limit 1";
$result = mysql_query($query);

$row = mysql_fetch_assoc($result);
var_dump($row); //=> дава масив, на който ключовете са 'id' и 'name' (имената на колоните от заявката)

$row2 = mysql_fetch_array($query);
var_dump($row2); //=> дава масив със следните ключове: 'id', 'name', 0 и 1. Стойностите в 'id' и 0 са идентични, както и в 'name' и 1.

$row_count = mysql_num_rows($query);
echo $count; //=> дава броя на редовете, върнати от заявката. В случая 1, защото изрично съм казал '... limit 1'
Сигурно се чудиш какво дава mysql_fetch_assoc/array ако са върнати 2 или повече реда?
Винаги връщат реда след предишния, който са върнали. При първото извикване връщат първия ред, разбира се. Когато е върнала и последния ред, при следващото извикване връща false. Пример:

PHP:
// нека $result е резултат (mysql_query) на заявка, която дава 3 реда

var_dump(mysql_fetch_assoc($query));//масив с първия ред от заявката
var_dump(mysql_fetch_assoc($query));//с втория ред
var_dump(mysql_fetch_assoc($query));//с третия ред
var_dump(mysql_fetch_assoc($query));//връща  false, понеже са върнати всички редове.
И за да не пишеш всеки път тия редове, се използва това:

Код:
while($row = mysql_fetch_array($query)) {
//всеки път на $row ще се присвоява стойността от mysql_fetch_array(), когато функцията върне false, ще се излезе от цикъла.
}
 
stankata90 каза:
vinsbg каза:

Разликата между mysql_fetch_array() и mysql_fetch_assoc() е че при array() ключовете са числа 0,1,2,3,4... а при assoc ключовете носят имената на колоните от таблицата и такова нещо като добавяне два пъти няма ;)

Ти си страхотен!
*_array() връща два масива(ако не се зададе втория параметър какъв да е). Единия с числови стойности, другия е асоциативен. По-принцип не е желателно да се ползва, защото се пълни двойно паметта.
Понякога говорите без да сте прочели дори документацията.

Другото, което е, тези функции вече не е желателно да се ползват, защото от версия 5.5.0 ще станат deprecated.
Алтернативните са да се ползва MySQLi или PDO. Така че се насочи към едно от двете.
 
Явно съм настъпал накое светило по мазолчето..., човешко е човек да збърка, тъпо е да не си признае. както и да е, направих си проверките за себеси "анонимен" се оказа прав а до следващия пост, благодаря и аз така се чуствам. Независимо от факта че не бях прав ?! :wink:
 
Revelation каза:
stankata90 каза:
vinsbg каза:

Разликата между mysql_fetch_array() и mysql_fetch_assoc() е че при array() ключовете са числа 0,1,2,3,4... а при assoc ключовете носят имената на колоните от таблицата и такова нещо като добавяне два пъти няма ;)

Ти си страхотен!
*_array() връща два масива(ако не се зададе втория параметър какъв да е). Единия с числови стойности, другия е асоциативен. По-принцип не е желателно да се ползва, защото се пълни двойно паметта.
Понякога говорите без да сте прочели дори документацията.

Другото, което е, тези функции вече не е желателно да се ползват, защото от версия 5.5.0 ще станат deprecated.
Алтернативните са да се ползва MySQLi или PDO. Така че се насочи към едно от двете.

ако още не си го проумял от горния пост масива си е "ЕДИН" стойностите се дублират.
 

Back
Горе