PDA

View Full Version : سوال: حل یک مشکل



amirali_bk
دوشنبه 10 دی 1397, 21:05 عصر
سلام دوستان
وقت بخیر .
من از روتر زیر که یکی از دوستان نوشته استفاده کردم .
https://github.com/khanzadimahdi/router
اما برای صفحه اصلی وقتی آدرس فقط / هست که برای صفحه اصلیه فایل config.php کار میکنه اما وقتی ادرس رو این شکلی {page}/ وارد میکنم که برگه هارو تنظیم کنم ارور زیر رو بهم نشون میده البته اینو بگم آدرس ها مشکلی ندارن و روتر درست داره کار میکنه اما این ارور داره اذیت میکنه ! اگه راهنمایی کنید ممنون میشم



Fatal error: Call to a member function query() on null in C:\wamp\www\followerman\public\include\config.php on line 26


اینم محتویات فایل config.php


<?php
try {
$db = new PDO("mysql:host=localhost;dbname=followerman","root","");
$db->exec("set names utf8");
echo "conected";
} catch (Exception $e) {
die("ارور دیتابیس : متاسفانه ارتباط برقرار نشد ، لطفا مقادیر دیتابیس را چک کنید !");
}

/**
* @property PDO db
*/
class all_query{

/**
* all_query constructor.
*/
public function __construct()
{
global $db;
$this->db = $db;
}


public function get_settings() {
$sql = $this->db->query( "SELECT * FROM settings");
return $sql->fetch( PDO::FETCH_ASSOC );
}

public function get_pages() {
$sql = $this->db->query( "SELECT * FROM page_tbl ORDER BY pos ASC " );
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
return $result;
}

}



ممنونم

peymang
سه شنبه 11 دی 1397, 15:24 عصر
خط 3 ، root غلط املایی داره از اون نیست ؟

farhad_shiri_ex
سه شنبه 11 دی 1397, 16:23 عصر
سلام دوستان
وقت بخیر .
من از روتر زیر که یکی از دوستان نوشته استفاده کردم .
https://github.com/khanzadimahdi/router
اما برای صفحه اصلی وقتی آدرس فقط / هست که برای صفحه اصلیه فایل config.php کار میکنه اما وقتی ادرس رو این شکلی {page}/ وارد میکنم که برگه هارو تنظیم کنم ارور زیر رو بهم نشون میده البته اینو بگم آدرس ها مشکلی ندارن و روتر درست داره کار میکنه اما این ارور داره اذیت میکنه ! اگه راهنمایی کنید ممنون میشم



Fatal error: Call to a member function query() on null in C:\wamp\www\followerman\public\include\config.php on line 26


اینم محتویات فایل config.php


<?php
try {
$db = new PDO("mysql:host=localhost;dbname=followerman","root","");
$db->exec("set names utf8");
echo "conected";
} catch (Exception $e) {
die("ارور دیتابیس : متاسفانه ارتباط برقرار نشد ، لطفا مقادیر دیتابیس را چک کنید !");
}

/**
* @property PDO db
*/
class all_query{

/**
* all_query constructor.
*/
public function __construct()
{
global $db;
$this->db = $db;
}


public function get_settings() {
$sql = $this->db->query( "SELECT * FROM settings");
return $sql->fetch( PDO::FETCH_ASSOC );
}

public function get_pages() {
$sql = $this->db->query( "SELECT * FROM page_tbl ORDER BY pos ASC " );
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
return $result;
}

}



ممنونم

این پیغام خطا داره میگه که در زمان فراخوانی فانکشن query مقدار آبجکت this->db$ مقدار null داره یعنی مقدار دهی نشده! و به این علت هم هست که نتونسته به پایگاه داده متصل بشه و کانکشنی برقرار کنه!
در کل چرا instance دیتابیس را global تعریف کردید و بعد از خارج از کلاس دارید بهش مقدار دهی میکنید ؟(البته اشتباه نیست ولی کار درستی هم نیست!)
بهتره تو خود همون کلاس ارتباط را برقرار کنید و هندل کانکشن به دیتابیس را هر جا که لازم دارید پاس بدید؟

amirali_bk
سه شنبه 11 دی 1397, 16:59 عصر
این پیغام خطا داره میگه که در زمان فراخوانی فانکشن query مقدار آبجکت this->db$ مقدار null داره یعنی مقدار دهی نشده! و به این علت هم هست که نتونسته به پایگاه داده متصل بشه و کانکشنی برقرار کنه!
در کل چرا instance دیتابیس را global تعریف کردید و بعد از خارج از کلاس دارید بهش مقدار دهی میکنید ؟(البته اشتباه نیست ولی کار درستی هم نیست!)
بهتره تو خود همون کلاس ارتباط را برقرار کنید و هندل کانکشن به دیتابیس را هر جا که لازم دارید پاس بدید؟


سلام .
ممنون از راهنماییتون آخه اینکارو یجا دیگه هم تست کردم صحیح کار میکرد اما اینجا باید تو خود کلاس دیتابیس رو به __construct میدادم که اینکارو کردم و درست شد .
تشکر فراوان :قلب::قلب: