Помощник
|
Почему ничего не выводит? |
alex159
|
Сообщение
#1
|
||
|
|
||
|
|||
matroskin8 |
22.8.2013, 11:09;
Ответить: matroskin8
Сообщение
#2
|
|
Прошу помочь, где ошибка Как минимум ошибка в том, что функция ничего не возвращает, а должна возвращать результат запроса: public function select($chto,$table,$where) {
if($where != " ") { $result = mysql_query("SELECT $chto FROM $table WHERE $where") or die("MySql error w!".mysql_error()); $myrow = mysql_fetch_array($result); } else{ $result = mysql_query("SELECT $chto FROM $table") or die("MySql error!".mysql_error()); $myrow = mysql_fetch_array($result); } return $myrow; // возвращаем результат } |
|
|
fedornabilkin |
22.8.2013, 11:30;
Ответить: fedornabilkin
Сообщение
#3
|
|
Так ведь ретурна в методе нету. Выборка производится, но не возвращается результат.
|
|
|
alex159
|
Сообщение
#4
|
|
Так ведь ретурна в методе нету. Выборка производится, но не возвращается результат. Как минимум ошибка в том, что функция ничего не возвращает, а должна возвращать результат запроса: Спасибо, я в классах и функциях слаб. Вот и учусь. Теперь все обрабатываеться, но выводиться вместо этого "Array". Можете подсказать как правильно реализовать эту функцию? Считывания данных с базы. Я хочу потом это использовать в шаблоне. Что бы каждый раз не писать такое $result = mysql_query("SELECT $chto FROM $table") or die("MySql error!".mysql_error()); $myrow = mysql_fetch_array($result); А просто вывести функцию с нужными мне параметрами. |
|
|
fedornabilkin |
22.8.2013, 12:35;
Ответить: fedornabilkin
Сообщение
#5
|
|
Массив и должен возвращаться.
Далее циклом можно обойти массив и сформировать контент. Проверяем, наличие массива и обрабатываем if(is_array($array)){ foreach($array as $row){ $list .= '<p>'.$row['id'].'</p>'; } } echo $list; $array - это то, что возвратит метод |
|
|
KirSl_hb |
23.8.2013, 23:43;
Ответить: KirSl_hb
Сообщение
#6
|
|
В зависимости где дальше данные использовать. Если, например, для вывода, например статью или товар какой-нибудь, то лучше использовать ассоциативный массив и выбор будет следующим:
// вместо mysql_fetch_array -> mysql_fetch_assoc // завернули одно в другое, в $result сразу массив будет // Конструкция or die() хороша при отладке, но для проекта лучше использовать готовый класс или заготовить в таких местах условие на случай для польователя и продакшна $result = mysql_fetch_assoc(mysql_query("SELECT $chto FROM $table")) or die("MySql error!".mysql_error()); if(!$result) echo 'Запрашиваемых данных в базе не обнаружено'; //написать можно что угодно. Это увидит пользователь, если по какой-то причине запрос не сработает // Далее массив будет вида // [0] => Array('key1' => 'value'); // Разобрать его на 2 составляющие. Если нужны ключи. Если нет, разбираем как foreach($result as $value) foreach($result as $key => $value) { $key .= '<p>'. $key .'</p>'; $value .= '<p>'. $value .'</p>'; } PS: неудобный редактор кода.. |
|
|
fedornabilkin |
24.8.2013, 17:15;
Ответить: fedornabilkin
Сообщение
#7
|
|
Вообще-то в $value сваливается ассоциативный массив, когда форичем его обходишь.
|
|
|
c0ns0l3 |
31.8.2013, 21:27;
Ответить: c0ns0l3
Сообщение
#8
|
|
Уважаемый [member=alex159], Вам нужно понять в 1ю очередь сам смысл работы классов и "видимость" переменных.
<?php <?php /** * @author c0ns0l3 * @copyright 2013 */ class db { private $dbh; private $result; private $last_query; private $out; public $count; /** * db::__construct() * * @param mixed $host * @param mixed $login * @param mixed $psw * @param mixed $db * @return */ public function __construct($host,$login,$psw,$db) { #Здесь сохраняем в классе линк на соединение $this->dbh = @mysql_connect($host,$login,$psw,$db); #Проверям установку соединения if(!$this->dbh) { echo 'Error connecting to MYSQL SERVER'; die(); return false; } #Выбираем БД и проверям процедуру if(!mysql_select_db($db,$this->dbh)) { echo 'Error selecting DB on MYSQL SERVER'; die(); #Если надо вообще завершить код return false; } return true; } /** * db::query() * * @param mixed $query * @return */ private function query ($query) { #Затычка на повторный вызов if($this->last_query == $query) return $this->result; $result = @mysql_query($query,$this->dbh); if(!$result) return false; #Очищаем временные переменные $this->out = array(); $this->last_query = $query; #Сохраняем в лкассе результаты запроса (mysql resource) $this->result = $result; #Возвращаем результат (вдруг понадобится) return $result; } /** * db::get_results() * * @param mixed $query * @return */ public function get_results($query = null) { //Затычки if(is_null($query)) return false; //Обрабатываем запрос $this->query($query); //Проверка ответа if(!$this->result) return false; //Считаем количество строк ( на случай если хочешь работать с объектами) $num_rows = 0; // тот самый случай while( $row = @mysql_fetch_object ( $this->result ) ) { while( $row = @mysql_fetch_array ( $this->result ) ) { $this->out[$num_rows] = $row; $num_rows++; } //Сохраням количество строк $this->count = $num_rows; //Возвращаем массив с данными return $this->out; } /** * db::get_last_result() * * @return */ public function get_last_result() { if(is_array($this->out)) return $this->out; return false; } } ?> Используем соответственно: $mysql = new db('host','username','password','db_name'); $users = $mysql->get_results('SELECT * FROM users WHERE 1 = 1'); echo $users->count; //количество найденных пользователей //$users = будет уже массив данных А это кусок из моего класса, с которым работаю на данный момент, правда под M$ SQL.. /** * Получение всех данных из запроса * @param string $query * @param string $output (OBJECT,ARRAY_Y,ARRAY_N) * @return mixed * */ function get_results( $query = null, $output = 'OBJECT' ) { if ( $query ) $this->query( $query ); else return null; $new_array = array(); if ( $output == 'OBJECT' ) { return $this->last_result; } elseif ( $output == 'OBJECT_K' ) { foreach ( $this->last_result as $row ) { $var_by_ref = get_object_vars( $row ); $key = array_shift( $var_by_ref ); if ( ! isset( $new_array[ $key ] ) ) $new_array[ $key ] = $row; } return $new_array; } elseif ( $output == 'ARRAY_A' || $output == 'ARRAY_N' ) { if ( $this->last_result ) { foreach( (array) $this->last_result as $row ) { if ( $output == 'ARRAY_N' ) { $new_array[] = array_values( get_object_vars( $row ) ); } else { $new_array[] = get_object_vars( $row ); } } } return $new_array; } return null; } private function query( $query ) {
$query = iconv('utf-8','windows-1251',$query); if ( count($this->exception) ) return false; $query = $this->prepare_db($query); $return_val = 0; $this->flush(); $this->last_query = $query; if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) $this->timer_start(); $this->result = @mssql_query( $query, $this->dbh ); $this->queries[] = $query; if(!$this->result) { return new ADK_Error(new Exception(mssql_get_last_message()),true); } if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) $this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() ); if ( preg_match( '/^s*(create|alter|truncate|drop)s/i', $query ) ) { $return_val = $this->result; } elseif ( preg_match( '/^s*(insert|delete|update|replace)s/i', $query ) ) { $this->rows_affected = mssql_rows_affected ( $this->dbh ); if ( preg_match( '/^s*(insert|replace)s/i', $query ) ) { //TODO: how to find inserted PK in MSSQL? oO } // Return number of rows affected $return_val = $this->rows_affected; } else { $num_rows = 0; while ( $row = @mssql_fetch_object ( $this->result ) ) { array_walk($row,array($this,'convert_to_utf8')); $this->last_result[$num_rows] = $row; $num_rows++; } // Log number of rows the query returned // and return number of rows selected $this->num_rows = $num_rows; $return_val = $num_rows; } return $return_val; } |
|
|
alex159
|
Сообщение
#9
|
|
[member=c0ns0l3], большое спасибо, но с дня создания темы прошло 8 дней.
уже разобрался. |
|
|
sosnovskij |
2.9.2013, 11:08;
Ответить: sosnovskij
Сообщение
#10
|
|
[member=alex159], в таком случае желательно писать, что проблема решена
-------------------- |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Почему нельзя давать рекламу на бренд? | 6 | Bilish | 1318 | 12.1.2020, 13:47 автор: BLIK |
|
Почему стоит выбрать именно Berileads? | 2 | leadkreditrf | 1820 | 27.11.2019, 12:39 автор: -leadkreditrf- |
|
Почему слайдер не работает в IE ? | 1 | GTAlex | 1380 | 2.11.2016, 11:53 автор: BLIK |
|
Почему мой контент называют Королевским? Продающие тексты и SEO-статьи роскошного качества за 1-2 дня |
36 | Octavodia | 12882 | 22.10.2015, 18:19 автор: grumdas |
|
"Почему так дешево?" Рерайт/Копирайт. Качественный контент по низким ценам! |
17 | Vadim_text | 6133 | 9.10.2015, 15:23 автор: Octavodia |
Текстовая версия | Сейчас: 29.3.2024, 19:18 |