PDA

View Full Version : سوال: رفع اشکال ارور Warning: mysqli::close(): Couldn't fetch mysqli



sparrow.ali
شنبه 02 خرداد 1394, 14:00 عصر
سلام و خسته نباشید

من دارم یک وب اپلیکشین مینویسم و از سبک oop دارم استفاده میکنم
متاسفانه تو طراحی کلاس دیتا بیس مشکل خودرم

من از این کدا برای وصل شدن به دیتا بیس استفاده میکنم.





/* * This codes created by ALIASGHAR KESHAVARZ (+98 939 067 5600) */
class DataBase { private $conn; private $info; private $db;
public function __construct ($servername=DB_SERVER, $user=DB_USER, $pass=DB_PASS, $db=DB_DATABASE) {

$this->db = $db; $this->conn = new mysqli($servername,$user,$pass, $this->db); if (!$this->conn)
{ if ($this->conn->connect_error) { $this->info = "ERROR CODE=DB100: Connection failed <br> " . $conn->connect_error; $this->close(); echo $this->getInfo(); } else { $this->info = "ERROR CODE=DB101: Connection failed <br> "; $this->close(); echo $this->getInfo(); }
}
}
public function getInfo () { return $this->info; }


// send sql to database

public function sendQuery ($sqll) { $this->conn->set_charset("utf8"); $result = $this->conn->query($sql); if ($result == true) { return $result; } else { $this->info = "ERROR CODE=DB102: Sql query not work <br>".$this->conn->error; $this->close(); echo $this->getInfo(); return false;
}
}
// This method close the connection
public function close () {
$this->conn->close();
}
function __destruct() {
$this->close();
}
}





من هرکاری کردم کد بالا درست نشد تو اینجا
لینک سورسش اینه

http://s6.picofile.com/file/8189890634/database.rar.html
(http://s6.picofile.com/file/8189890634/database.rar.html)



بعد وقتی نمونه کد زیر رو میزنم





$con = new DataBase();
$r = $con->sendQuery("INSERT INTO `table`.`c` (`name`) VALUES ('$var');");
$con->close();










کد کار میکنه و تو دیتا بیسم مینویسه ولی خطای
Warning: mysqli::close(): Couldn't fetch mysqli in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\automasion\admin\p rotected\componets\database.php on line 102
که به این کد اشاره میکنه رو میده


public function close () {
$this->conn->close();
}



و از
$this->conn->close();
تو کد اولی که دادم ایراد میگره
باس چی کنم دوستان؟ :(

under22
شنبه 02 خرداد 1394, 14:06 عصر
این چه وضعه کد گذاشتن هست دوست عزیز درست بزار اینطوری کسی نمیخونه

sparrow.ali
شنبه 02 خرداد 1394, 14:06 عصر
دارم درست میکنم
مرسی گفتین
کپی پیست کردم بهم ریخته

sparrow.ali
شنبه 02 خرداد 1394, 14:28 عصر
این چه وضعه کد گذاشتن هست دوست عزیز درست بزار اینطوری کسی نمیخونه

آقا شرمنده
کدا بد کپی میشد
سورسو گداشتم
دمت گرم بخون ببین چی میفهمی :(

MohammadReza1994
شنبه 02 خرداد 1394, 14:42 عصر
اگه دوتا شی از این کلاس داری میسازی که هر دو مثلا به ادرس localhost دسترسی دارن، در اخر کار که شی اولیو close کنی هر دو بسته میشن و وقتی میخوای شی دوم هم close کنی خطا میده که پایگاه داده بسته شده. کلا از mysql close استفاده نکن. تا اونجایی که من میدونم و اگر تو تنظیمات php info دیده باشی، تو تنظیمات پیشفرض بستن خودکار پایگاه داده انجام میشه.

sparrow.ali
شنبه 02 خرداد 1394, 14:48 عصر
دمت گرم آقا
آره چندتا شی میسازم ازش
اگر کلوز نکنم مشکلی پیش نمیاد؟
من نمیخام کانکشن باز بمونه
راه حلی هست دستی ببندمو مطمن شم که درست کار کنه؟

MohammadReza1994
شنبه 02 خرداد 1394, 19:46 عصر
چون به یه ادرس اشاره دارن با یه بار بسته شدن همه بسته میشه. خود سرور اپاچی میبندتش. بیخیال برو بقیه کدتو بزن خیالت راحت.

MohammadReza1994
شنبه 02 خرداد 1394, 19:48 عصر
البته php info یه نگا بنداز که حتما بسته شدن خودکار فعال باشه

sparrow.ali
یک شنبه 03 خرداد 1394, 10:35 صبح
سلام
مشکل حل شد. ربطی هم به اون موردی که شما گفتید نداشت :)
ولی به هر حال مرسی که کمک کردین
مشکل فقط تعریف اضافه





function __destruct() {

$this->close();

}