Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
Есть простые запросы:
SELECT question FROM la_question WHERE id=1;

и
SELECT answer FROM la_answer WHERE id_question=1;

Первый запрос выводит только одну запись, второй некое множество, три-пять. Запрос я делаю через созданный класс, метод:
// запрос
	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;
		

	}

Все, в принципе работает, но мне нужно не это, и не пойму как. Например код:
$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. А по второму запросу я вообще хочу в кнопки запихнуть. Но я не могу разобраться с этими массивами.
На вот это у меня выдает ошибку:
echo $quest['question'];

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

Где читать, что я не так делаю? Мне нужно значение поля таблицы, мне не нужен весь массив с названием поля.
10 авг 18, 11:56    [21637505]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Изопропил
Member

Откуда:
Сообщений: 30896
Stang
Где читать

в документации.

mysqli_fetch_array
10 авг 18, 12:05    [21637528]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
Изопропил
в документации.

mysqli_fetch_array

Та я уже перепробовал столько, что мне кажется я вообще не там ищу. В данном случае мне выдает нечто такое:
автор
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, array given in

Вот тупо с документации пример скопировал:
$row = mysqli_fetch_array($quest, MYSQLI_NUM);
		printf ("%s (%s)\n", $row[0]);
10 авг 18, 12:22    [21637564]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
И что как по мне странно, вроде как у меня не обычный массив, а объект, и если я пытаюсь сделать вот так:
$row = $quest->fetch_assoc();
		echo "Выведем? ".$row['question'];

То выдает вот такого плана ошибку:
автор
Fatal error: Call to a member function fetch_assoc() on a non-object in
10 авг 18, 12:51    [21637629]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 942
я так делаю
 ///
    /// 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());
        }

    }
10 авг 18, 12:57    [21637640]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
waszkiewicz, это как-то сложно для меня еще воспринимать. А часом нет рабочего варианта, например на GitHub посмотреть? Чтобы я мог проследить всю цепочку? Воровать не буду, копипастить тоже, мне бы смыл понять...
10 авг 18, 13:06    [21637666]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 942
Stang,
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());
        }
    }

использование
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 нет, не выкладываю
10 авг 18, 13:33    [21637754]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 942
 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>");
10 авг 18, 13:41    [21637784]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
Я все же продолжу тему. Не знаю, что я не правильно делаю, но работая вне классов, все у меня получается выводить, в любом нужном мне виде. Если создаю свой класс, все пропало.

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

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

Или может мне нужно выводить переменную $data?
21 авг 18, 11:04    [21649100]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
vkle
Member

Откуда: Самара
Сообщений: 14387
Stang
Если создаю свой класс, все пропало.
...гипс снимают, клиент уезжает. Отличное описание технической проблемы! Что пропало то?


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


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


Или может мне нужно выводить переменную $data?
Опять же, сложно что-либо сказать, не видя проблемного кода.
21 авг 18, 14:52    [21649610]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
vkle
...гипс снимают, клиент уезжает. Отличное описание технической проблемы! Что пропало то?

Так вроде выше описана проблема?
Если кратко, то вот такой код, просто на страничке, не через класс, работает:
$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
Опять же, сложно что-либо сказать, не видя проблемного кода.

Вот так я сделал метод:
public function __toString () {
	return $this->query;
}

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

В результате на выходе я получаю: Array
21 авг 18, 15:36    [21649676]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
vkle
Member

Откуда: Самара
Сообщений: 14387
Stang
Вот так я сделал метод:
public function __toString () {
	return $this->query;
}


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


В результате на выходе я получаю: Array

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

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


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


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


В общем, внимательно смотрите за типами данных, с которыми работаете. При непонятках используйте для анализа ситуации функцию var_dump().
21 авг 18, 16:46    [21649780]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение из поля таблицы в PHP?  [new]
Stang
Member

Откуда:
Сообщений: 102
vkle, супер! Вот оно, чего я так не мог добиться! Даже в мозгах посветлело! Вот именно, что я и подозревал, что что-то с типами данных, как бы и php мне намекал... :)
$proba = $db->query("SELECT question FROM la_question");
    echo $proba[0]->question;

И все работает!!!! Спасибо огромное. Получается __toString мне и не нужен? Мне нужна именно возможность выводить отдельно каждую ячейку, а не весь массив в одну строку.
21 авг 18, 17:24    [21649821]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить