• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در query گرفتن
#1
سلام خدمت اساتید

من یه صفحه دارم فرض کنید به اسم

1.php
کد پی‌اچ‌پی:
<?php 
class database
{
    function 
__construct()
{
    try
    {
        
$host="localhost";
        
$name="counter";
        
$type="mysql";
        
$user="root";
        
$pass="";
        
$dsn="$type:host=$host;dbname=$name";
        
$connect=new PDO($dsn,$user,$pass);
        return 
$connect;
    }
    catch(
PDOException $error)
    {
    echo 
"No";
    }
}
}
?>

و یه صفحه دیگه هم دارم به اسم :
2.php
کد پی‌اچ‌پی:
<?php
include ('1.php');
$connect=new database();
$sql="INSERT INTO counter (country, city, state, timelogin, datelogin) VALUES('IR', 'Tehran', 'CA', '0000-00-00', '00:00:00')";
$test=$connect->query($sql);
?>

من وقتی صفحه 2 رو باز میکنم با خطا مواجه میشم :

Fatal error: Call to undefined method database::query() in C:\wamp\www\test.php on line 5

میشه یه راهنمایی کنید ؟
وقتی از کلاس استفاده نکنم تو صفحه 1 مشکلم حل میشه اما وقتی داخل کلاس میره اینجوری میشه ...

ممنون از جوابتون پیش پیش
  پاسخ
تشکر شده توسط :
#2
سلام
سعی کنید از pdo به صورت توابع استفاده نمایید
مانند این روش
کد پی‌اچ‌پی:
class database
{
    protected 
$_link,$_rowcount;
    
    public function 
__construct($con,$server_username,$server_password)
    {
        
        try
        {
            
$this->_link=new PDO($con,$server_username,$server_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
            
        }
        catch(
PDOEXception $e)
        {
            exit(
"error in connect");
        }
    }
    
    public function 
query($sql)
    {
        
$query=$this->_link->prepare($sql);
        
$query->execute();
    }
    

خودتون میتونید بیهایت public function تعریف کنید و از اون توی برنامه هاتون استفاده کنید مثلا اینجا تابع query برای درج و حذف از دیتابیس کاربرد داره
برای استفاده هم فقط باید این فایل یا کد رو توی صفحتون اینکلود کنید
  پاسخ
تشکر شده توسط : kiarash_kcm
#3
ممنون ... ولی من این مثال رو زدم که با زبان ساده مشکلم حل بشه ... حالا اونجوری که رو پروژه نوشتم رو میگذارم لطفا رو همین کد ها کمک کنید که خیلی واجب هستش :

من یه فایل دارم به اسم

database.php در فولدر config:

کد پی‌اچ‌پی:
<?php
define
('DB_TYPE','mysql');
define('DB_HOST','localhost');
define('DB_NAME','counter');
define('DB_USER','root');
define('DB_PASS','');
?>

یه فایل دیگه هست به اسم :

database.php در فولدر LIBS :
کد پی‌اچ‌پی:
<?php
class Database
{
    function 
__construct()
    {
        try
        {
            
$dsn=DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME;
            
$con=new PDO($dsn,DB_USER,DB_PASS);    
            
//return $con;
        
}
        catch(
PDOException $error)
        {        
            Echo 
"I can't Connect to the Database";
        }

    }
}
?>
یه فایل هم در فولد Models دارم به اسم counter.php :

کد پی‌اچ‌پی:
<?php
class counter
{
    function 
__construct()
    {
        
$con=new Database();
        
$sql="INSERT INTO counter (country, city, state, timelogin, datelogin) VALUES('d', 'd', 'd', 'd', 'f')";
        
$result=$con->query($sql);
    }
}
?>

و فکر کنید من در یه صفحه دیگه این 3 تا صفحه رو include کردم و یه شی از کلاس counter هم ساختم اما خطا میگیره ... برای همین کد رو ساده کردم جای دیگه و قسمت اتصال به بانک رو از حالت class در آوردم بعد کد راحت کار کرد ...یه مشکلی در صفحه counter.php وجود داره لطف کنید اساتید یه راهنمایی به من بکنید خیلی خیلی ممنون.
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۵ اردیبهشت ۳۱, ۰۲:۲۸ ب.ظ)kasbookar نوشته: سلام
سعی کنید از pdo به صورت توابع استفاده نمایید
مانند این روش
کد پی‌اچ‌پی:
class database
{
    protected 
$_link,$_rowcount;
    
    public function 
__construct($con,$server_username,$server_password)
    {
        
        try
        {
            
$this->_link=new PDO($con,$server_username,$server_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
            
        }
        catch(
PDOEXception $e)
        {
            exit(
"error in connect");
        }
    }
    
    public function 
query($sql)
    {
        
$query=$this->_link->prepare($sql);
        
$query->execute();
    }
    

خودتون میتونید بیهایت public function تعریف کنید و از اون توی برنامه هاتون استفاده کنید مثلا اینجا تابع query برای درج و حذف از دیتابیس کاربرد داره
برای استفاده هم فقط باید این فایل یا کد رو توی صفحتون اینکلود کنید

ممنون با کمی تغییر رو کد شما مشکل رو حل کردم ... ممنون از کمکت ... سوال من هنوز سر جاش اما مشکلم حل شد ... مرسیییییییی
  پاسخ
تشکر شده توسط :
#5
نقل قول: و فکر کنید من در یه صفحه دیگه این 3 تا صفحه رو include کردم و یه شی از کلاس counter هم ساختم اما خطا میگیره ... برای همین کد رو ساده کردم جای دیگه و قسمت اتصال به بانک رو از حالت class در آوردم بعد کد راحت کار کرد ...یه مشکلی در صفحه counter.php وجود داره لطف کنید اساتید یه راهنمایی به من بکنید خیلی خیلی ممنون.
شما داخل counter اومدید یک شی به اسم con ساختید و خواستید متد query از شی con رو اجرا کنید

شی con از کلاس database هست و متدی به اسم query تعریف نشده براش !!!
من احساس میکنم شما دارید به ذهنیت تابعی از کلاسها استفاده میکنید
اینکه توی construct شی pdo رو خروجی بدید که نمیشه !

اگه سر در گم نمیشید یه روشی بگم از اون استفاده کنید

شما یک کلاس رجیستری بسازید و هر جا از هر ابزاری مثلا دیتابیس و ... شی ای ساختید بریزید توی رجیستری و خلاص
  پاسخ
تشکر شده توسط : kasbookar
#6
(۱۳۹۵ اردیبهشت ۳۱, ۱۰:۳۸ ب.ظ)Reza نوشته:
نقل قول: و فکر کنید من در یه صفحه دیگه این 3 تا صفحه رو include کردم و یه شی از کلاس counter هم ساختم اما خطا میگیره ... برای همین کد رو ساده کردم جای دیگه و قسمت اتصال به بانک رو از حالت class در آوردم بعد کد راحت کار کرد ...یه مشکلی در صفحه counter.php وجود داره لطف کنید اساتید یه راهنمایی به من بکنید خیلی خیلی ممنون.
شما داخل counter اومدید یک شی به اسم con ساختید و خواستید متد query از شی con رو اجرا کنید

شی con از کلاس database هست و متدی به اسم query تعریف نشده براش !!!
من احساس میکنم شما دارید به ذهنیت تابعی از کلاسها استفاده میکنید
اینکه توی construct شی pdo رو خروجی بدید که نمیشه !

اگه سر در گم نمیشید یه روشی بگم از اون استفاده کنید

شما یک کلاس رجیستری بسازید و هر جا از هر ابزاری مثلا دیتابیس و ... شی ای ساختید بریزید توی رجیستری و خلاص

خیلی خیلی ممنونم متوجه اشتباهم شدم ... توضیح شما عالی بود ممنون
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان