مشکل کار با کلاس دیتابیس (حل شد)
با سلام
بنده کلاسی که استاد در بخش 9 برای کار با دیتابیس رو آموزش دادن دقیقا اجرا کردم ولی با خطای زیر مواجه میشم .
line13: $this->connection->query("SET NAMES UTF8");
Fatal error: Call to a member function query() on a non-object in F:\wamp\...\db.php on line 13
از قسمت $this->connection->query(); اشکال میگیره و هر کوئری که قرار بدم با خطا مواجه میشه.
کسی میدونه چطور میشه حلش کرد ؟
دوست عزیز هر کلاس ، سازنده و مخرب داره که سازنده ها هنگام ایجاد نمونه از کلاس اولین متدی هستند که اجرا و مخرب ها هنگام نابودی نمونه اجرا میشوند. البته در اکثر زبان ها این دو متد هم نام کلاس میباشند که در php و java از همون عبارت construactor استفاده شده که واسه مخرب ها از علامت ! استفاده میشود. البته اینا خارج از این بحث بود % من سورس کلاس رو که استاد نوشتن رو کامل میذارم و کاملا هم درسته من ازش استفاده کردم البته یه متد exeSQL اضافه شده که استاد در آینده توضیح خواهند داد برای دستورات INSERT , DELETE از آن استفاده میشود %
<?php class DB{ private $connection; public function __construct(){ $this->connection = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); $this->connection->query("SET NAMES UTF8"); } public function query($sql){ $result = $this->connection->query($sql); $output = array(); while($row = mysqli_fetch_assoc($result)){ $output[] = $row; } return $output; } public function execSQL($sql){ $result = $this->connection->query($sql); return $result; } public function close(){ $this->connection->close(); } }
در ضمن پارامتر های mysqli_connect رو باید تو فایل config.php مشخص کنید طبق فرمایشات استاد و در آخر هم اونا رو مانند زیر در فایل index.php مربوط به روتینگ Require کنید :
require(getcwd() . "/config.php"); require(getcwd() . "/controller/controller.php"); require(getcwd() . "/core/db.php"); require(getcwd() . "/core/render.php");
مشکل از خط زیر بود
$this->connection = mysql_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
که باید اینگونه درج میشد
$this->connection = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
یه اشتباه خیلی ریز و کوچک
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .