Вопрос MySQLi

Print RSS
343

Author
Пацак
0
<?php
	if(!($db=new mysqli("localhost", "db_user", "db_pass")))
	{
		print("Нет соединения с сервером базы");
		exit;
	}
	if(mysqli_select_db($db,"db_name")===false)
	{
		print("База даных не обнаружена");
		exit;
	}
	$db_array=$db->query("SELECT * FROM `for_theam` ORDER BY `id` DESC");
	while($db_theam=mysqli_fetch_assoc($db_array))
	{
		$db_user=mysqli_fetch_assoc($db->query("SELECT * FROM `user` WHERE `id` = '".$db_theam['id_author']."' LIMIT 1"));
	}
	$db_array->close();/* Это здесь обязательно? */
	$db->close();
?>

Добавлено через 03:02 сек.
Кгбэ пишу код с mysqli и мне стало интересно query() всегда закрывать close надо? Просто, если да то как мне поступить с $db_user? Кгбэ курсы переквалификации mysql->mysqli
А

Оранжевые штаны
0
Желательно закрывать
db_user это не соединение с базой, там нечего закрывать.
$db_array->close();/* Это здесь обязательно? */ - это не нужно закрывать, это тоже не соединение с базой
Author
Пацак
0
2. Башка, то есть, актуально только $db->close();?
просто в мануалах она после каждго query() есть...
А

Оранжевые штаны
0
MySQLi :: query возвращает объект класса mysqli_result implements Traversable, который, как можно судить по расширяемому интерфейсу, может быть итерирован в foreach цикле.
Функция mysqli_fetch_assoc реализует тот же подход, но поэлементарного итерирования. То есть то, что возвращается методом query не нужно close, а close нужно только соединение, то есть new mysqli

Добавлено через 01:21 сек.
Пример такого закрытия из мануала покажите

Добавлено через 02:31 сек.
Вообще в классе mysqli_result не определен метод close, следовательно его закрытие это ошибка
Changed: Артур (23.07.2012 / 16:10)
Author
Пацак
0
4. Башка, Очень подробно и доходчиво. Спасибо тебе большёе, очень помог)
Вопрос исчерпан, тему можно close(); ) ГГ)
А

Оранжевые штаны
0
Не за что. Когда работаете с ООП, обращайте внимание на тип входного и выходного значения методов. Они могут быть объектными и там уже нужно смотреть что можно делать с этим возвращаемым объектом

Добавлено через 01:56 сек.
В частности ваш код можно упростить:
<?php 
    if(!($db=new mysqli("localhost", "db_user", "db_pass"))) 
    { 
        print("Нет соединения с сервером базы"); 
        exit; 
    } 
    if(mysqli_select_db($db,"db_name")===false) 
    { 
        print("База даных не обнаружена"); 
        exit; 
    } 

    $db_user = [];
    $db_array=$db->query("SELECT * FROM `for_theam` ORDER BY `id` DESC"); 
    foreach($db_array as &$v){
      $db_user[]=$db->query("SELECT * FROM `user` WHERE `id` = '".$v['id_author']."' LIMIT 1");
    } 
foreach($db_user as &$user){
  foreach($user as &$property){
    // Проход по свойствам каждого пользователя
  }
}
    $db->close(); 
?> 
И побойтесь запросов в цикле, используйте JOIN
Changed: Артур (23.07.2012 / 16:19)
Author
Пацак
0
6. Башка, а подробнее об этом можно где-то почитать? Ток на русском желательно...
А

Оранжевые штаны
0
О чем?
Author
Пацак
0
Действительно, с foreach() он симпатичнее смотрится)
Я прост как-бы самоучка и трафа на поиск путёвых учебников тоже нет...
А

Оранжевые штаны
0
PHP. Объекты, шаблоны и методики программирования. Путевый учебник по ООП в PHP
Stickers / Tags / Rules / Top topics / Top Posts / Search