Ошибка на уровне объектов и функций
1.
YouMobe (08.11.2013 / 15:12)
Пишу скрипт вывода информации из БД:
<?php
/**
* ПК - пользователей, общая характеристика компьютера.
*/
$sql = 'SELECT * FROM `users_pc`';
$result = $mysqli->query($sql); // Запрос посредством php+mysql(i) в БД
$row = $result->fetch_assoc(); // Преобразование результата даных полученых с БД в ассоциативный массив
echo '<table class="table table-bordered">';
foreach($row as $key => $value){
echo '<tr><td>'.$key.':</td><td> <strong>'.$value.' </strong></tr>';
}
echo '</table>';
?>
, теперь тоже самое только в функции..
<?php
/**
* ПК - пользователей, общая характеристика компьютера.
*/
$sql = 'SELECT * FROM `users_pc`';
showPC($sql);
function showPC($sql){
$result = $mysqli->query($sql); // Запрос посредством php+mysql(i) в БД
$row = $result->fetch_assoc(); // Преобразование результата даных полученых с БД в ассоциативный массив
return $row;
}
echo '<table class="table table-bordered">';
foreach($row as $key => $value){
echo '<tr><td>'.$key.':</td><td> <strong>'.$value.' </strong></tr>';
}
echo '</table>';
?>
а тут уж выводит ошибку: Fatal error: Cannot redeclare showPC() (previously declared in /home/suleiman/www/app/functions.php:8) in /home/youmobe/www/app/pc.php on line 13
Помогите решить проблему, почему при помощи функции не работает скрипт и выдает ошибку)
2.
юЮЮфюв (08.11.2013 / 15:17)
Ты же функцию вызываешь до её описания
3.
YouMobe (08.11.2013 / 15:22)
TakteS (8 Ноября 2013 / 15:17)
Ты же функцию вызываешь до её описания
А что есть разница?), в PHP разницы нет где описывать до или после, все равно так же будет.
4.
Ant0ha (08.11.2013 / 15:23)
Где то уже определена эта функция.
5.
YouMobe (08.11.2013 / 15:24)
Ant0ha (8 Ноября 2013 / 15:23)
Где то уже определена эта функция.
А вот это в полне возможно, щас просмотртю везде... Так оно и есть)
но теперь вылетела другая ошибка свзянанно с объектом походу
Notice: Undefined variable: mysqli in /home/youmobe/www/app/pc.php on line 10
Fatal error: Call to a member function query() on a non-object in /home/youmobe/www/app/pc.php on line 10
Добавлено через 08:07 сек.
Ошибка указывает на эту строку
$result = $mysqli->query($sql); // Запрос посредством php+mysql(i) в БД
6.
Михаил (08.11.2013 / 16:02)
В функциях по-умолчанию локальная область видимости переменных, ты берешь данные из глобальной переменной. Либо передавай в функцию еще и переменную $mysqli, либо в функции пиши global $mysqli;
7.
YouMobe (08.11.2013 / 18:30)
Flyd (8 Ноября 2013 / 16:02)
В функциях по-умолчанию локальная область видимости переменных, ты берешь данные из глобальной переменной. Либо передавай в функцию еще и переменную $mysqli, либо в функции пиши global $mysqli;
Блин, чёт не выходит, скиньте годный мануал или статью, хочу понять что я не так делаю..
это $mysql->query($sql) напишите аналог как еще вызвать mysqli
или в этой функции в глобал вынести
8.
Александр (08.11.2013 / 19:00)
function (....)
{
global $mysqli;
......
дальше все так же.
только не пинать.
я знаю, что многие не рекомендуют использовать global
9.
YouMobe (08.11.2013 / 23:27)
rastoman (8 Ноября 2013 / 19:00)
function (....)
{
global $mysqli;
......
дальше все так же.
только не пинать.
я знаю, что многие не рекомендуют использовать global
Это то понятно,а есть альтернатиное решение?) может по другому организовать?
10.
Артур (08.11.2013 / 23:44)
Тебе, автор, нужно конкретезировать цели
11.
YouMobe (09.11.2013 / 00:22)
Башка (8 Ноября 2013 / 23:44)
Тебе, автор, нужно конкретезировать цели
Просто этот вариант не заработал, вышла другая ошибка
Цель: Хочу занести в функцию
$sql = 'SELECT * FROM `users_pc`';
$result = $mysqli->query($sql); // Запрос посредством php+mysql(i) в БД
$row = $result->fetch_assoc(); // Преобразование результата даных полученых с БД в ассоциативный массив
не знаю почему то выходит ошибка. Может хотябы методом ООП покажешь как можно организовать это?
12.
Артур (09.11.2013 / 15:31)
Ну тебе ответили: переменной $mysqli в области видимости функции нет, вот оно и ругается. Или используй global или реализуй Локатор служб. Пример приведу:
class Services{
private $services = [];
private $object;
private function __construct(){}
public static function getInstance(){
if(is_null($this->object)){
$this->object = new self;
}
return $this->object;
}
public function getService($name){
switch($name){
case 'mysqli':
if(!isset($this->services[$name])){
$this->services[$name] = new MySQLi(...);
}
break;
}
$this->services[$name];
}
}
function syncPC(...){
$mysqli = Services::getInstance()->getService('mysqli');
...
}
На ошибки не проверял
URL:
https://visavi.net/topics/39431