Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как получить значение из поля таблицы в PHP? / 13 сообщений из 13, страница 1 из 1
10.08.2018, 11:56
    #39685982
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
Есть простые запросы:
Код: sql
1.
SELECT question FROM la_question WHERE id=1;


и
Код: sql
1.
SELECT answer FROM la_answer WHERE id_question=1;


Первый запрос выводит только одну запись, второй некое множество, три-пять. Запрос я делаю через созданный класс, метод:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// запрос
	public function query($sql) {
		// проверяем соединение
		if (!$this->connection) {
			return false;
		}
		// делаем запрос
		$result = $this->connection->query($sql);
		// проверяем на ошибки
		if (mysqli_error($this->connection)) {
			throw new Exception(mysqli_error($this->connection)); 
		}
		// если запрос не на получение данных, возвращаем его результат
		if (is_bool($result)) {
			return $result;
		}
		// получаем данные в массив
		$data = array();
		while ($row = $result->fetch_object()) {
			$data[] = $row;
		}
		// очищаем память и возвращаем результат
		
		mysqli_free_result($result);
		return $data;
		

	}


Все, в принципе работает, но мне нужно не это, и не пойму как. Например код:
Код: php
1.
2.
3.
4.
5.
$proba = new Database(HOST, USER, PASS, DB);
	$quest = $proba->query("SELECT question FROM la_question");
	echo "<pre>";
	var_export($quest);
	echo "</pre>";


Дает такой ответ:
авторarray (
0 =>
stdClass::__set_state(array(
'question' => 'Добрый день! Делаем звонок?',
)),
)

Я понимаю, можно и print_r использовать, или еще чего, но мне нужно не это, мне нужно 'question' вывести, например в блок <DIV> через echo. А по второму запросу я вообще хочу в кнопки запихнуть. Но я не могу разобраться с этими массивами.
На вот это у меня выдает ошибку:
Код: php
1.
echo $quest['question'];


Ошибка:
авторNotice: Undefined index: question in D:\xampp\htdocs\SalesPHP\proba.php on line ...
Где читать, что я не так делаю? Мне нужно значение поля таблицы, мне не нужен весь массив с названием поля.
...
Рейтинг: 0 / 0
10.08.2018, 12:05
    #39685989
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
StangГде читать
в документации.

mysqli_fetch_array
...
Рейтинг: 0 / 0
10.08.2018, 12:22
    #39686002
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
Изопропилв документации.

mysqli_fetch_array
Та я уже перепробовал столько, что мне кажется я вообще не там ищу. В данном случае мне выдает нечто такое:
авторWarning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, array given in
Вот тупо с документации пример скопировал:
Код: php
1.
2.
$row = mysqli_fetch_array($quest, MYSQLI_NUM);
		printf ("%s (%s)\n", $row[0]);
...
Рейтинг: 0 / 0
10.08.2018, 12:51
    #39686027
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
И что как по мне странно, вроде как у меня не обычный массив, а объект, и если я пытаюсь сделать вот так:
Код: php
1.
2.
$row = $quest->fetch_assoc();
		echo "Выведем? ".$row['question'];


То выдает вот такого плана ошибку:
авторFatal error: Call to a member function fetch_assoc() on a non-object in
...
Рейтинг: 0 / 0
10.08.2018, 12:57
    #39686032
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
я так делаю
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 ///
    /// Returns associative array
    ///
    protected function execute() {
        try {
            $sth=$this->dbh->prepare($this->sth);
            $sth->execute($this->params);
            $this->params=array();
            return $sth->fetchAll(PDO::FETCH_ASSOC);
        }
        catch(PDOException $e) {
            die('Sorry, an error has occured during execute(). Contact your su. Error:'.$e.getMessage());
        }

    }
    ///
    /// Returns non-associative array
    ///
     protected function executeN() {
        try {
            $sth=$this->dbh->prepare($this->sth);
            $sth->execute($this->params);
            $this->params=array();
            return $sth->fetchAll(PDO::FETCH_NUM);
        }
        catch(PDOException $e) {
            die('Sorry, an error has occured during executeN(). Contact your su. Error:'.$e.getMessage());
        }

    }
...
Рейтинг: 0 / 0
10.08.2018, 13:06
    #39686041
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
waszkiewicz, это как-то сложно для меня еще воспринимать. А часом нет рабочего варианта, например на GitHub посмотреть? Чтобы я мог проследить всю цепочку? Воровать не буду, копипастить тоже, мне бы смыл понять...
...
Рейтинг: 0 / 0
10.08.2018, 13:33
    #39686059
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
Stang,
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class DBCore {
    protected $dbh;
    protected $sth;
    protected $params;
    
   
    ///
    /// Constructor
    ///
    function __construct($path) {
        $config=parse_ini_file($path,TRUE);
        $server = 'localhost';
        $dbname=$config[someshit][someshit];
        $uname=$config[someshit][someshit];
        $pass=$config[someshit][someshit];
        
        try {
            $this->dbh=new PDO("mysql:host=$server;dbname=$dbname",$uname,$pass);
        }
        catch(PDOException $e)   {
            die("Sorry, an error has occured during connection. Contact your su. Error :".$e->getMessage());
        }
    }


использование
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class DIA extends DBCore {



function __construct($path) {
    parent::__construct($path); 
    }
function getExContents($cat,$parentid) {
    $this->sth="select ne.id id
                ,ne.name name
                ,p.name cat
                ,p.id pid
                from nxExecs ne 
                join parameters p
                on p.id=ne.category
                where (ne.category=:cat or :cat is null)
                and parentid=:parentid
                order by name";
    $this->params=array("cat"=>$cat,"parentid"=>$parentid);
    return $this->execute();
}
}


на Git нет, не выкладываю
...
Рейтинг: 0 / 0
10.08.2018, 13:41
    #39686062
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 printf("<table class='dtable'>");
             foreach($dia->getExContents($_POST["cond"]==''?null:$_POST["cond"],$_POST["parent"]) as $row)
             {
                 printf("<tr data-id='%s' data-pid='%s'><td>%s %s</td><td>%s</td><td>%s</td></tr>"
                 ,$row["id"]
                 ,$row["pid"]
                 ,"<a href='#' class='nxexEdit' >Правка</a>"
                 ,"<a href='#' class='nxexDelete'>Удалить</a>"
                 ,$row["name"]
                 ,$row["cat"]);
             }
        printf("</table>");
...
Рейтинг: 0 / 0
21.08.2018, 11:04
    #39690877
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
Я все же продолжу тему. Не знаю, что я не правильно делаю, но работая вне классов, все у меня получается выводить, в любом нужном мне виде. Если создаю свой класс, все пропало.

Наткнулся в одной книге на интересный метод __toString, но не совсем пойму как он работает. Сделал так:
Код: php
1.
2.
3.
public function __toString () {
	return $this->query;
}


У меня на выводе только предупреждение и слово массив -
Код: php
1.
2.
Notice: Array to string conversion in D:\xampp\htdocs\SalesPHP\index.php on line 43
Array


Или может мне нужно выводить переменную $data?
...
Рейтинг: 0 / 0
21.08.2018, 14:52
    #39691118
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
StangЕсли создаю свой класс, все пропало....гипс снимают, клиент уезжает. Отличное описание технической проблемы! Что пропало то?


StangНаткнулся в одной книге на интересный метод __toString, но не совсем пойму как он работает.В мануале http://php.net/manual/ru/language.oop5.magic.php#object.tostring описание вполне исчерпывающе одним абзацем.


StangУ меня на выводе только предупреждение и слово массив -
Код: php
1.
2.
Notice: Array to string conversion in D:\xampp\htdocs\SalesPHP\index.php on line 43
Array



Или может мне нужно выводить переменную $data?Опять же, сложно что-либо сказать, не видя проблемного кода.
...
Рейтинг: 0 / 0
21.08.2018, 15:36
    #39691156
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
vkle...гипс снимают, клиент уезжает. Отличное описание технической проблемы! Что пропало то?
Так вроде выше описана проблема?
Если кратко, то вот такой код, просто на страничке, не через класс, работает:
Код: php
1.
2.
3.
4.
5.
6.
$results_q = $mysqli->query("SELECT question FROM la_question WHERE id=1");
		while($row = $results_q->fetch_assoc()) {
			
			echo sprintf($row["question"], $name);
			
		}


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

vkleВ мануале http://php.net/manual/ru/language.oop5.magic.php#object.tostring описание вполне исчерпывающе одним абзацем.
В принципе оттуда я и пытаюсь сделать свой код, но не получается.


vkleОпять же, сложно что-либо сказать, не видя проблемного кода.
Вот так я сделал метод:
Код: php
1.
2.
3.
public function __toString () {
	return $this->query;
}


Вот так я его вызываю:
Код: php
1.
2.
$dbRes = $db->query("SELECT * FROM la_answer");
echo "$dbRes";


В результате на выходе я получаю: Array
...
Рейтинг: 0 / 0
21.08.2018, 16:46
    #39691200
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
StangВот так я сделал метод:
Код: php
1.
2.
3.
public function __toString () {
	return $this->query;
}



Вот так я его вызываю:
Код: php
1.
2.
$dbRes = $db->query("SELECT * FROM la_answer");
echo "$dbRes";



В результате на выходе я получаю: Array
Дык волшебный метод __toString() применим к экземпляру класса, в данном случае к объекту $db. Ваш же метод query() возвращает массив. В принципе, в ряде случаев элементы массива соединить в строку можно функцией implode(), если хотите, но толку от этого маловато, по большому счету, будет. Хотя, для какого-то простого случая вполне может сгодиться. Не для данного случая, разумеется. Вам этот вывод echo для чего нужен то?

По первому посту.
StangНа вот это у меня выдает ошибку:
Код: php
1.
echo $quest['question'];



Ошибка:
авторNotice: Undefined index: question in D:\xampp\htdocs\SalesPHP\proba.php on line ...

Где читать, что я не так делаю?Смотрите внимательно. Даже, очень внимательно. Ваш метод query() возвращает простой массив (с индексами 0, 1, 2 и т.д.), в который собраны все строки результата запроса. В данном конкретном случае будет возвращена единственная строка данных, которая попадет в массив с нулевым индексом. Это раз.
И два. Каждая строка данных представляет собой объект, который возвращается методом fetch_object().
Таким образом, если Вы желаете получить поле 'question' из первой строки результата запроса, то должны обращаться к нулевому элементу массива $data и только потом по имени поля к свойству объекта. Примерно так:
Код: php
1.
echo $quest[0]->question;



В общем, внимательно смотрите за типами данных, с которыми работаете. При непонятках используйте для анализа ситуации функцию var_dump().
...
Рейтинг: 0 / 0
21.08.2018, 17:24
    #39691225
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение из поля таблицы в PHP?
vkle, супер! Вот оно, чего я так не мог добиться! Даже в мозгах посветлело! Вот именно, что я и подозревал, что что-то с типами данных, как бы и php мне намекал... :)
Код: php
1.
2.
$proba = $db->query("SELECT question FROM la_question");
    echo $proba[0]->question;


И все работает!!!! Спасибо огромное. Получается __toString мне и не нужен? Мне нужна именно возможность выводить отдельно каждую ячейку, а не весь массив в одну строку.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как получить значение из поля таблицы в PHP? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]