PDA

View Full Version : سوال: در خواست راهنمایی در رابطه با اتصال به دیتابیس



moosa14
سه شنبه 21 مهر 1394, 19:08 عصر
سلام
به این error در اتصال به دیتا بیس برخوردم از دوستانی که اطلاع دارن ممنون میشم راهنمایی کنند.

Fatal error: Call to a member function prepare() on a non-object in ....... on line 15

متشکرم

Unique
سه شنبه 21 مهر 1394, 19:38 عصر
prepare ربطی به اتصال به database نداره ، بلوک کد را بگذارید تا بشه نظر داد. احتمالا کلا به database متصل نیست و resource که دادین مشکل داره.

moosa14
سه شنبه 21 مهر 1394, 20:20 عصر
متشکرم دوست عزیز




<?php
class ManageCustomers{
public $link;
function __construct()
{
$db_connection = new dbConnection();
$this->link = $db_connection->connect();
return $this->link;
}

function CustomerLogin($username,$password)
{
global $prefix;
$query = $this->link->prepare("SELECT * FROM `".$prefix."customers` WHERE `cusername`=? AND `cpassword`=?");
$values = array($username,$password);
$query->execute($values);
$counts = $query->rowCount();
return $counts;
}
}
?>

از همون لاینی که تابع prepare داخلش هست ایراد میگیره

moosa14
سه شنبه 21 مهر 1394, 20:22 عصر
اینم کلاس dbConnection


<?php
class dbConnection{
protected $db_conn;
function connect(){
global $dbhost,$dbusername,$dbname,$dbpass;
try {
$this->db_conn = new PDO("mysql:host=$dbhost;dbname=$dbname;",$dbusername,$dbpass,array(PDO::MYSQL_ATTR_INIT_CO MMAND
=> "SET NAMES utf8"));
return $this->db_conn;
}
catch (PDOException $e)
{
return 0;
}
}
}
?>

atpf67
چهارشنبه 22 مهر 1394, 02:11 صبح
خطا مربوط میشه به متغیر prefix، به این خاطر که شما هیچ مقداری رو بهش ندادین، در واقع اون non-object رو به این خاطر زده. ضمن این که من نقش این متغیر رو متوجه نشدم راستش...

و نکته ی بعدی اینکه فکر میکنم باید کوئری تون رو هم به شکل زیر اصلاح کنید:


$query = $this->link->prepare("SELECT * FROM ".$prefix."customers WHERE cusername=? AND cpassword = ? ");


موفق باشید- یا علی

Unique
چهارشنبه 22 مهر 1394, 15:17 عصر
this->link$ مقدار معتبری نداره ! با تابع print_r بررسی کنید ببینید مقدارش چیه. احتمالا false باید باشه. در کل resource درستی برای اعمال query نیست.