[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Первый класс
quickxyan
Пробую писать первый класс. Класс будет подключаться к БД и у него есть 4 метода: добавить, изменить, удалить, выбрать.

первых 3 работают, а вот с 4 есть проблемы. А именно это, то что например мне надо выбрать 10 или 20 пользователей, то их надобно записать в массив.
Вот код.


<?php
class
connect{
var $link;
var $data;

function __construct($host, $user, $pass, $db){
$this->link = mysql_connect($host, $user, $pass);
mysql_select_db($db, $this->link);
$result = mysql_query("SET NAMES UTF8");
@mysql_fetch_assoc($result);
}

function insert($sql){
$result = mysql_query($sql) or die('error insert');
@mysql_fetch_assoc($result);
}

function update($sql){
mysql_query($sql) or die('error update');
}

function delete($sql){
$result = mysql_query($sql) or die('error delete');
@mysql_fetch_assoc($result);
}

function select($sql){
$result = mysql_query($sql) or die('error select');
while($row = @mysql_fetch_assoc($result)){
$this->data['id'][] = $row['id']; //все id записываються в массив
}

}
}



$con = new connect('localhost', 'root', '', 'db'); //подключение к БД

$sql = "INSERT INTO `test` (`id`, `name`, `pass`) VALUES(NULL, 'quickxyan', 'password')";
$con->insert($sql);

$sql = "UPDATE `test` SET `name` = 'fatal' WHERE `id` = '2' LIMIT 1";
$con->update($sql);

$sql = "DELETE FROM `test` WHERE `name` = 'quickxyan'";
$con->delete($sql);

$sql = "SELECT * FROM `test` ORDER BY `id`";
$con->select($sql);

$data = $con->data['id'];

foreach($data as $val)
echo $val.'<br/>';



В общем хочу, чтобы в массив data записался массив row. пробовал так

$row = mysql_fetch_assoc($result);
$data = $row;


так получается, что в массиве будет только одна первая запись так как нету цыкла, а с цыклом будет последняя запись. Подскажите как можно из метода передать полностью массив данных.




Спустя 18 минут, 10 секунд (12.02.2012 - 20:52) Игорь_Vasinsky написал(а):
в цикле забивай массив и возвращай его.

Спустя 2 минуты, 10 секунд (12.02.2012 - 20:54) Игорь_Vasinsky написал(а):
Цитата
var $link;
    var $data;

так делали ещё в php4 smile.gif

Спустя 4 минуты, 42 секунды (12.02.2012 - 20:59) inpost написал(а):
Функции умеют возвращать данные благодаря return smile.gif

Спустя 8 минут, 22 секунды (12.02.2012 - 21:07) quickxyan написал(а):
Цитата (Игорь_Vasinsky @ 12.02.2012 - 17:52)
так делали ещё в php4 

а сейчас уже не надо описывать переменные?

inpost
пробовал return, но что-то возвращалась пустота(не массив, а просто переменную).


Спустя 4 минуты, 3 секунды (12.02.2012 - 21:11) Игорь_Vasinsky написал(а):
в 5ке используют pablic, private и т.д. - ты по старой книжке чтоль учишься?? ни есть гуд.


Спустя 42 секунды (12.02.2012 - 21:12) inpost написал(а):
quickxyan
Внутри функции создай переменную обычную, и её потом return.
А вообще, не вижу смысла такой конструкции smile.gif Ты только сам себе хуже делаешь.

Спустя 33 секунды (12.02.2012 - 21:13) nugle написал(а):
замени ф-ию на такую
function select($sql){
$result = mysql_query($sql) or die('error select');
while($row = @mysql_fetch_assoc($result)){
$data[] = $row['id']; //все id записываються в массив
}
return $data;
}

А при вызове метода, запиши в переменную результат

p.s. inpost опередил :(

Спустя 3 минуты, 16 секунд (12.02.2012 - 21:16) inpost написал(а):
nugle
А у тебя warning, $data не определена smile.gif
И зачем собака для fetch_assoc - это тоже не надо.

Спустя 25 минут, 11 секунд (12.02.2012 - 21:41) quickxyan написал(а):
Цитата (quickxyan @ 12.02.2012 - 18:07)
ты по старой книжке чтоль учишься?? ни есть гуд.

Да в онлайне прочитал несколько уроков.

nugle
ну я уже понял с return , дело в том как вернуть полностью весь массив, не только поле с айди?

Цитата (Игорь_Vasinsky @ 12.02.2012 - 18:11)
А вообще, не вижу смысла такой конструкции  Ты только сам себе хуже делаешь.

Не совсем понял? это ты о том, что вообще не зачем работу с БД тулить в класс или именно в моем коде, что-то закручено?

Цитата (nugle @ 12.02.2012 - 18:13)
И зачем собака для fetch_assoc - это тоже не надо.

вылетает нотис без собаки.

Спустя 2 минуты, 5 секунд (12.02.2012 - 21:43) nugle написал(а):
inpost
ну так бывает :) я же не тестил :rolleyes:

quickxyan
Цитата
ну я уже понял с return , дело в том как вернуть полностью весь массив, не только поле с айди?

Ну а если додумать, ты присваиваешь одному массиву значения другого. Используя array_keys выбираешь все ключи, прогоняешь через foreach, примерно выглядит это так:

function select($sql){
$result = mysql_query($sql) or die('error select');
$data = array();
$i = 0;
while($row = @mysql_fetch_assoc($result)){
$arr = array_keys($row);
$data[$i] = array();
foreach($arr as $key => $val)
{
$data[$i][$val] = $row[$val];
$i++;
}

}

return $data;
}

Спустя 15 минут, 12 секунд (12.02.2012 - 21:58) caballero написал(а):
Цитата
вылетает нотис без собаки.


если что то вылетает надо исправить код а не удавить ошибку и сделать вид что ее нет


Спустя 40 минут, 38 секунд (12.02.2012 - 22:39) Dezigo написал(а):
Концепция подхода ужасна.
1. Всё что здесь сделано, это просто набор методов.

2. Здесь нужно подходить с другой стороны, а именно:
Singelton + Abstract factory

Где реализация будет выглядеть примерно так

DB::query->('SELECT * FROM users')->toArray();


В таком подходе вы отделите логику, работы с данными(получение) и их использование.
А ваш этот подход смысла особого не имеет.,так как это набор функций.
+ У вас нет exceptions.

Спустя 24 минуты, 40 секунд (12.02.2012 - 23:04) quickxyan написал(а):
nugle
Спасибо, такая функция работает на ура.

caballero
спасибо, наверное погуглю по данной проблеме

Спустя 3 минуты, 16 секунд (12.02.2012 - 23:07) quickxyan написал(а):
Dezigo
Спасибо за советы. Я только начал учить ООП, так вот и не разбираюсь вовсе в концепции. Дело обстоит так: прочитал - потестил, а с концепциями пока можно сказать вообще не знаком smile.gif


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.