ExtJS Windows Ortamında üzerinde iyi değil çalışma ile bir php tabanlı arama tesisi

2 Cevap php

Ben ExtJS ve PHP ile bir arama olanağı yarattı. PHP dosyası veritabanı ile iletişim ile sunucu tarafı betik. Benim Linux Çevre, onun kusursuz çalışıyor. Ben bir Windows Server bu uygulamayı yüklemeniz gerekir Ancak, benim kişisel Windows XP kopyalamak için çalıştı.

Ben Apache, gerekli uzantıları ile PHP, MySQL ve yüklü. Oturum açma ekranı yüklerin ve kimlik İşler. Eğer kimlik doğrulaması zaman, uygulama (; idcard, vs .. veri kişiler hakkında bilgi) başarıyla verileri yükler.

Ben aramak için deneyin ne zaman sorun oluşur. Ben Linux envirnoment üzerinde arama yaparken, şimdi Firebug bana aşağıdaki hata gösterir, çalışıyordu:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'am' in 'where clause'

Ben herhangi bir sütun 'am' yok. Bunun en benzer ADI sütundur. Ben sorunu yalıtmak için php dosyadan kod parçalarını kaldırarak çalıştım ama boşuna oldu.

Eğer arama Windowos çalışan ama Linux üzerinde çalışmıyor neden herhangi bir fikrin var mı?

İşte php dosyası için kod:

function regexp($search, $value) {
// case insensitive hard coded
return @preg_match("/$search/i", $value); 
}

function concat_ws() {
    $args = func_get_args();
    $sep = array_shift($args);
    return implode($sep, $args);
} // eo function concat_ws

 function quote_array(&$val, $key, $quot = '"') {
    $quot_right = array_key_exists(1, (array) $quot) ? $quot[1] : $quot[0];
    $val = is_null($val) ? "null" : $quot[0] . preg_replace("/'/", "''", $val) .    $quot_right;
}

class csql {

public function getLastTable() {

$sql  = "SELECT table_name, create_time FROM information_schema.TABLES WHERE table_schema = 'mydbname' ORDER BY CREATE_TIME desc LIMIT 1";

$ostmt = $this->odb->query($sql);
$tableArray = $ostmt->fetchAll(PDO::FETCH_OBJ);

$table = $tableArray[0]->table_name;

return $table;

}

// protected functions
protected function getOdb($engine) {
    switch($engine) {
        case "sqlite":
            if("/" !== $file[0]) {
                $file = realpath(".") . "/$file";
            }
            $odb = new PDO("sqlite:$file");
            $odb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $odb->sqliteCreateFunction("regexp", "regexp", 2);
            $odb->sqliteCreateFunction("concat_ws", "concat_ws");
        break;

        case "mysql";
            $hostname = 'localhost';
            $username = 'myuser';
            $password = 'mypass';
            $odb = new PDO("mysql:host=$hostname;dbname=mydbname", $username, $password);
            $odb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        break;
    }

    return $odb;
} 

protected function getWhere($params) {

    $where = isset($where) ? "where $where" : "";

    $query = "";

    if($query && is_array($search) && sizeof($search)) {
        $a = array();
        foreach($search as $f) {
            $a[] = "$f regexp '$query'";
        }
        $where .= $where ? " and(" : "where (";
        $where .= implode(" or ", $a) . ")";
    }

    return $where;

} 

public function __construct($engine = "mysql") {
    $this->odb = $this->getOdb($engine);
} 

public function getCount($params) {

    // params to variables
    extract($params);

    $selectedFields = $_POST['fields'];

    $selectedFields = explode(",", $selectedFields);


    $count = 0;
    foreach ($selectedFields as $selectedField)
    {

        if ($count == 0)
        {
            $selectedField = substr_replace($selectedField, "", 0, 3);
            $selectedField= substr_replace($selectedField, "", -2);

            $selectedFields[0] = $selectedField;
        }

        else if ($count == count($selectedFields)-1)
        {
            $selectedField = substr_replace($selectedField, "", 0, 2);
            $selectedField = substr_replace($selectedField, "", -3);

            $selectedFields[count($selectedFields)-1] = $selectedField;
        }
        else
        {
            $selectedField = substr_replace($selectedField, "", 0, 2);
            $selectedField = substr_replace($selectedField, "", -2);

            $selectedFields[$count] = $selectedField;
        }

        $count++;
    }

    if ($count == 1)
    {
        $selectedFields[0] = substr_replace($selectedFields[0], "", -1);
    }

    if ($_POST['fields'] == "")
    {
        $like = "";
        foreach ($fields as $field)
        {
            $like = $like . $field . " LIKE '%" . $query . "%' or ";    

        }
        $like = substr_replace($like, "", -3);

    }
    else
    {
        $queryExploded = explode(" ", $query);

        $fullLike = "";

        foreach ($queryExploded as $explode)
        {
            foreach ($selectedFields as $selectedField)
            {
                $fullLike = $fullLike . " " . $selectedField . " LIKE '%" . $explode . "%' OR ";
            }

            $fullLike = substr_replace($fullLike, ") AND (", -3);

        }
        $fullLike = substr_replace($fullLike, "", -5);

    }

    $count = null;

    if ($_POST['fields'] == "")
    {
        $ostmt = $this->odb->prepare("select count(*) from {$params['table']} " . $this->getWhere($params));
    }
    else
    {
        $ostmt = $this->odb->prepare("select count(*) from {$params['table']} where (" . $fullLike . $this->getWhere($params));
    }

    $ostmt->bindColumn(1, $count);
    $ostmt->execute();
    $ostmt->fetch();
    return (int) $count;

} 

public function getData($params) {

    $fullLike = "";
    // params to variables
    extract($params);
    $selectedFields = $_POST['fields'];
    $selectedFields = explode(",", $selectedFields);

    $count = 0;
    foreach ($selectedFields as $selectedField)
    {

        if ($count == 0)
        {
            $selectedField = substr_replace($selectedField, "", 0, 3);
            $selectedField= substr_replace($selectedField, "", -2);

            $selectedFields[0] = $selectedField;
        }
        else if ($count == count($selectedFields)-1)
        {
            $selectedField = substr_replace($selectedField, "", 0, 2);
            $selectedField = substr_replace($selectedField, "", -3);

            $selectedFields[count($selectedFields)-1] = $selectedField;
        }
        else
        {
            $selectedField = substr_replace($selectedField, "", 0, 2);
            $selectedField = substr_replace($selectedField, "", -2);

            $selectedFields[$count] = $selectedField;
        }
        $count++;
    }

    if ($count == 1)
    {
        $selectedFields[0] = substr_replace($selectedFields[0], "", -1);
    }

    if ($_POST['fields'] == "")
    {
        $like = "";
        foreach ($fields as $field)
        {
            $like = $like . $field . " LIKE '%" . $query . "%' or ";    

        }
        $like = substr_replace($like, "", -3);  
    }
    else
    {
        $queryExploded = explode(" ", $query);

        $fullLike = "";

        foreach ($queryExploded as $explode)
        {
            foreach ($selectedFields as $selectedField)
            {
                $fullLike = $fullLike . " " . $selectedField . " LIKE '%" . $explode . "%' OR ";
            }

            $fullLike = substr_replace($fullLike, ") AND (", -3);

        }

        $fullLike = substr_replace($fullLike, "", -5);
    }

    $sql  = "select * ";
    //$sql .= implode(",", $fields);
    if ($fullLike == "")
    {
        $sql .= " from $table";
    }
    else
    {
        $sql .= " from $table where  (" . $fullLike . $this->getWhere($params);
    }
    $sql .= isset($groupBy) && $groupBy ? " group by $groupBy" : "";

    if(!is_null($sort)) {
        $sql .= " order by $sort";
        $sql .= is_null($dir) ? "" : " $dir";
    }
    if(!is_null($start) && !is_null($limit)) {
        $sql .= " limit $start,$limit";
    }


    $ostmt = $this->odb->query($sql);

    return $ostmt->fetchAll(PDO::FETCH_OBJ);

}

Bu kod ExtJS bir örnek oldu. Ben onu çok değiştirdi. Ancak, yine de sorunun kaynağı getWhere fonksiyonu oldu. Ancak, ben çıkarmadan denedim ve kod hala orada kaldı.

Ben bu sorun ile son 24 saat için mücadele edilmiştir. Ben buldum sadece 'çözüm' yinelenen alanları ile veritabanı oluşturmak oldu. İşte nedeni:

ExtJS ilk yükleri formu, sütunlar doğru, yani isim, idcard, vs .. ben aramaya başlamak zaman, sütun adının ilk ve son harfi bu gibi olmak anlamına gelir, kaybolur: AM, dcar, vb ..

Ne yaptık dcar, vs, ben onları adlandırma .. vs adı, idcard için çoğaltılması sütunlar oluşturmak için ..

Ben bu verilerin çoğaltılması çok olduğunu biliyorum ama bu sadece Windows üzerinde neden oluyor ben anlayamıyorum! Bu berbat!

Çok teşekkürler

2 Cevap

Sorunu daraltmak için bazı kod izolasyon yapmak.

Yeni bir PHP dosyası oluşturun. Kopya içine ONLY arama kodu. Tarayıcınızın (extjs kodu değil) aracılığıyla php dosyasını çalıştırın. Bu aynı şekilde başarısız mı?

Linux üzerinde değil, Windows üzerinde çalışır bu yana, bir dosya şifreleme sorunu olabilir? Bir sunucu yapılandırma sorunu? Windows ve Linux aynı veritabanına işaret ediyor?