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

Откуда:
Сообщений: 97
Есть простые запросы:
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

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

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

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

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

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

Откуда:
Сообщений: 97
И что как по мне странно, вроде как у меня не обычный массив, а объект, и если я пытаюсь сделать вот так:
$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

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

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

Откуда:
Сообщений: 913
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

Откуда:
Сообщений: 913
 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

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

Наткнулся в одной книге на интересный метод __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

Откуда: Самара
Сообщений: 14166
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

Откуда:
Сообщений: 97
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

Откуда: Самара
Сообщений: 14166
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

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

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