2011-06-07 4 views
0

ZF 1.11.5がこの検索機能を全面的に呼び起こしています。私はいくつかの異なる方法でクエリを作成しようとしましたが、私のビューにsqlステートメントを送信し、コピーしてphpMyAdminにsqlステートメントを貼り付け、ZFが窒息しているSQLを使用してレコードを取得しました。私は別のエラーのcoupldを取得しています:1)奇妙なSQLエラー '私のグーグルでは...これは、ZFのハングアップ..おそらく?)と2)致命的なエラー:未定義のメソッドを呼び出すApplication_Model_DbTable_Blah ::クエリ()ライン上の/blah/blah/blah.phpでここzend framework 1.11.5が検索機能で窒息している - mysql db

class Application_Model_DbTable_Ceres extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'listings'; 
    function getCourse($courseId) 
    { 
     $courseid = (int)$courseId; 
     $row = $this->fetchRow('id=?',$courseId); 
     if (!$row) 
        throw new Exception('That course id was not found'); 
     return $row->toArray(); 
    } 
} 

は、ビューファイル...投げたことがない気にしないで....私のモデルだ何とか

public function searchAction($page=1) 
{ 
    $searchForm = new Application_Model_FormIndexSearch(); 
    $this->view->searchForm = $searchForm; 
    $this->view->postValid = '<p>Enter keywords to search the course listings</p>'; 
    $searchTerm = trim($this->_request->getPost('keywords')); 
    $searchDb = new Application_Model_DbTable_Ceres(); 
    $selectSql = "SELECT * FROM listings WHERE `s_coursedesc` LIKE '%".$searchTerm."%' || `s_title` LIKE '%".$searchTerm."%'"; 
    $selectQuery = $searchDb->query($selectSql); 
    $searchResults = $selectQuery->fetchAll(); 
} 

エラー。私は真剣にZFを抑制し、代わりにCodeIgniterを使用することを検討しています。

あなたの考えを読んで楽しみにしています。お返事ありがとうございます(事前に)

+0

$ searchDbは=新しいApplication_Model_DbTable_Ceresを(); $ selectSql = "リストからのSELECT * WHERE' s_coursedesc' LIKE '% "。$ searchTerm。"%' || 's_title' LIKE '%"。$ searchTerm。 "%'"; $ selectQuery = $ searchDb-> query($ selectSql); $ searchResults = $ searchDb-> fetchAll($ selectQuery); はクエリにいくつかの変更を加えました。結果に変化はない。まだ巨大な失敗 –

+0

は、public function searchAction($ page = 1)から$ page = 1を削除しました。私が認めようと思っていたよりも長い...私はzendフレームワークがゴミだと決めました –

答えて

1

Zend_Db_Tableにquery()というメソッドがありますが、そのようなメソッドはありません。あなたがSQLを構築しているので、すでにあなたはそう、それが簡単に直接DBアダプタのクエリを呼び出すために見つけるかもしれない:

$selectSql = "SELECT * FROM listings WHERE `s_coursedesc` LIKE '%".$searchTerm."%' || `s_title` LIKE '%".$searchTerm."%'"; 
$searchResults = $selectQuery->getAdapter()->fetchAll($selectSql); 

が、これではなく、どのあなたは可能性のあるオブジェクトの結果にあなたのデータの配列を与えることに注意を期待している。また、POSTデータからその値を直接取得しているので、$ searchTermをここからエスケープする必要があります。

また、あなたは、プログラム的のようなもののクエリを形成することができる:

$searchTerm = '%'.$searchTerm.'%'; 
$select = $selectQuery->select(); 
$select->where('s_coursedesc LIKE ?', $searchTerm) 
     ->orWhere('s_title LIKE ?', $searchTerm); 
$searchResults = $searchQuery->fetchAll($select); 
関連する問題