PDA

View Full Version : خطا در استفاده از pdo (حل شد)



moon_sky
سه شنبه 30 مهر 1392, 18:57 عصر
سلام
من در استفاده از کدهای PDO بهم این پیغم خطا رو میده :

could not find driver
Fatal error: Call to a member function prepare() on a non-object in C:\Program Files\EasyPHP5.3.0\www\tree\cms\includes\article.p hp on line 16


این هم کدهام :



<?php
class Article{

public function fetch_all(){
global $pdo;

$query = $pdo->prepare('SELECT * FROM articles');
$query->execute();
return $query->fetchAll();

}

}
?>


خط 16 هم میشه :



$query = $pdo->prepare('SELECT * FROM articles');


کد صفحه connection هم اینه :



<?php
try{
$pdo=new PDO('mysql:host=localhost;dbname=cms','root','');
}
catch(PDOException $e) {
echo $e->getMessage();
}


?>

مهرداد سیف زاده
سه شنبه 30 مهر 1392, 23:12 عصر
ابتدا یک phpinfo بگیرید


echo phpinfo();


بدنبال pdo_mysql بگردید
باید چیزی شبیه تصویر زیر رو ببینید
http://s1.picofile.com/file/7979566662/pdo.png

در غیر اینصورت extension یا همون درایور pdo فعال نیست. البته توجه کنید در php ورژن های 5.1.44 به بالا بصورت پیش فرض فعال هست
برای فعال کردنش به مسیر نصب php در سیستون برید و در فایل php.ini بدنبال php_pdo_mysql.dll بگردید. جلوش ; داره که باید ; رو از جلوش بردارید برای فعال سازی سرورتون رو دوباره راه اندازی کنید.

برای رهایی از این مشکلات از آخرین نسخه نرم افزار سرور لوکال استفاده کنید. wamp یا xamp.

MMSHFE
سه شنبه 30 مهر 1392, 23:46 عصر
مطمئن بشین که قبل از اجرای خط 16، متغیر pdo$ به شکل صحیح مقداردهی شده و دستور زیر قبلش اجرا شده باشه:

$pdo=new PDO('mysql:host=localhost;dbname=cms','root','');
این خطا داره میگه pdo$ یک شئ نیست که شما بخواین متدهاش رو صدا بزنید و این هم یعنی هنوز مقداردهی نشده.

ابوذر محمودی
چهارشنبه 01 آبان 1392, 07:17 صبح
شما تو article.php اصلا connection.php رو فراخوانی کردین؟
به جای global $pdo; کد زیر رو بذارین تست کنین :

$pdo=new PDO('mysql:host=localhost;dbname=cms','root','');

-اختیاری:
البته بهتره هنگام اتصال نوع charset رو هم مشخص کنید :

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=ut f8', 'username', 'password');

اگه اینطوری عمل کنی بهتره :

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=ut f8', 'username', 'password',
array(PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

moon_sky
چهارشنبه 01 آبان 1392, 11:54 صبح
مرسی از همه ی دوستانی که پاسخ دادند.

ولی من رو سیستم فقط easyphp نصبه و یا xamp یا wamp اصلا ندارم. یعنی دلیل خطا همینه ؟
حالا کدومشون رو نصب کنم؟ تو اینترنت که سرچ کردم مثل اینکه wamp بهتره. ممنون میشم راهنماییم کنید.

ابوذر محمودی
چهارشنبه 01 آبان 1392, 12:40 عصر
easyphp هم کار همون xamp یا wamp رو انجام میده ، اگه به طور پیش فرض pdo فعال نیست باید php.ini رو باز کنین و این خطو فعال کنی :

extension=php_pdo_mysql.dll

بین wamp & xamp من xamp رو پیشنهاد میدم

moon_sky
چهارشنبه 01 آبان 1392, 15:48 عصر
مرسی از همه ی دوستان. مشکل همون مربوط به php.ini بود که فعالش کردم و برنامه اجرا شد.