PDA

View Full Version : ست كردن ديتابيس در application.ini



UnnamE
یک شنبه 19 دی 1389, 05:15 صبح
سلام رفقا
يه سوال داشتم كه از مشكل ام سرچشمه ميگيره
من واسه اينكه تنظيمات اتصال به ديتابيس رو توي فايل application.ini ست كنم به اين روش عمل كردم


[production]
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "127.0.0.1"
resources.db.params.username = ""
resources.db.params.password = ""
resources.db.params.dbname = "my_db"
resources.db.isDefaultTableAdapter = true

ديتابيس سرور من user & pass نداره
خب حالا چيزي لازم نيست در جاي ديگه اضاف كنم؟
يعني بدون هيچ هيچ مشكلي ميتونم Query ست كنم و با ديتابيس كار كنم؟
چون تا الان اين كار رو انجام دادم ولي هيچ كويري اجرا نميشه!

مرسي

HRezaei
یک شنبه 19 دی 1389, 23:08 عصر
نه
از نظر من که کانفیگ دیگه ای لازم نیست.
فقط اینم میتونی اضافه کنی که بعدها به مشکلی برنخوری
resources.db.params.charset="utf8"

چون تا الان اين كار رو انجام دادم ولي هيچ كويري اجرا نميشه!
باید ایراد از جای دیگه ای باشه.
پیغام خطای خاصی؟ کد اجرای کوئری تون مشکلی نداره؟

UnnamE
یک شنبه 19 دی 1389, 23:48 عصر
مرسي واسه جواب!
ببين اين مدل من واسه يه جدول هست!

<?php
class Model_Bug extends Zend_Db_Table_Abstract
{
protected $_name = 'bugs';

public function createBug($name, $email, $date, $url, $description, $priority, $status)
{
// create new row in the bugs table
$row = $this->createRow();

//set the row data
$row->author = $name;
$row->email = $email;
$dateObject = new Zend_Date($date);
$row->date = $dateObject->get(Zend_Date::TIMESTAMP);
$row->url = $url;
$row->description = $description;
$row->priority = $priority;
$row->status = $status;

//save the new row
$row->save();

// now fetch the id of the row you just created and return it
$id = $this->_db->lastInsertId();
return $id;
}
و اين هم كنترل من واسه ذخيره:

<?php

class BugController extends Zend_Controller_Action
{

public function submitAction ()
{
$bugReportForm = new Form_BugReportForm();
$bugReportForm->setAction('/bug/submit');
$bugReportForm->setMethod('post');
if ($this->getRequest()->isPost()) {
if ($bugReportForm->isValid($_POST)) {
$bugModel = new Model_Bug();
// if the form is valid then create the new bug
$result = $bugModel->createBug(
$bugReportForm->getValue('author'),
$bugReportForm->getValue('email'),
$bugReportForm->getValue('date'),
$bugReportForm->getValue('url'),
$bugReportForm->getValue('description'),
$bugReportForm->getValue('priority'),
$bugReportForm->getValue('status'));
// if the createBug method returns a result
// then the bug was successfully created
if ($result) {
$this->_forward('confirm');
}
}
}
$this->view->form = $bugReportForm;
}
خب بعد از اجرا شدن كنترلر submit در آخر باس از شرط بگذره كه اگه موفقيت آميز بود به كنترل confirm منتقل ميشه!
ولي در صورتي كه اين اتفاق نميفته و همچنان در كنترلر submit ميمونم يعني result$ موفقيت آميز نبوده!!

اصلا من درست استفاده كردم ؟
كلا وقتي تنظيمات ديتابيس رو توي application.ini ست ميكنيم به چه شكل باس استفاده كرد؟
مرسي

HRezaei
دوشنبه 20 دی 1389, 00:25 صبح
در مورد مشکل فعلیتون جواب قطعی ای ندارم. بهتره خط به خط اجرای برنامتون رو کنترل و دیباگ کنید ببینید دقیقا کجا لنگ میزنه.
اما به نظر میرسه ساختار توصیه شده ی ZF در مورد پروژه های MVC رو رعایت نمی کنید. حالا که به انگلیسی هم علاقه دارید این لینک رو ببینید و صفحات بعدیش رو هم به ترتیب دنبال کنید:
http://framework.zend.com/manual/en/learning.quickstart.create-project.html
اینم سمپل زند استودیو هستش که همون تئوری ها رو پیاده کرده:
64801
البته با mysql کار نکرده اما چندان فرقی نمی کنه.
موفق باشید

UnnamE
دوشنبه 20 دی 1389, 00:40 صبح
مرسي واسه لينك ها!
در مورد Example هم تا حالا با زند با SQLite كار نكرده بودم
جالبه!!

HRezaei
دوشنبه 20 دی 1389, 01:11 صبح
خط

$id = $this->_db->lastInsertId();
رو با این

$id = $this->getAdapter()->lastInsertId()
عوض کن. کد شما هربار id=0 رو برمی گردونه

UnnamE
دوشنبه 20 دی 1389, 01:16 صبح
واي چه جالب و خفن
همين حالا همزمان با جوابت من هم جواب رو فهمديم
حدس ميزدم بايد مشكل از كتاب باشه
اين صفحه رو نگاه كن
http://apress.com/book/errata/1130
زير فرم ايراد هفتم به همين اشاره كرده!!!
مرسي زياد!