2012-09-08 12 views
0

使用MySQLi和ArrayObjects時,這不僅僅是一個問題,更是一條學習路線。如果這是您的舊帽子,請隨時爲以下內容添加任何其他改進。如果是MySQLi和ArrayObject的新手,這是整個過程的一個簡短例子。這是FAR程序風格更有效率。使用MySQLi和ArrayObjects輸出數據

查詢:

//constants for mysqli credentials, DB_HOST,DB_UNAME etc. 
include('dbase'); 

//zip code to seach 
$zipcode = 10003; 

//instantiate the object variable 
$mysqli = new mysqli(DB_HOST,DB_UNAME,DB_UPWORD,DB_NAME); 

//run the query searching for matching records using a regular expression 
$result = $mysqli->query("SELECT corg_id, corg_name, corg_city FROM sometable WHERE corg_zip REGEXP '^$zipcode';"); 

//using fetch_object() returns an ArrayObject 
while ($row = $result->fetch_object()){ 
     $zipmatch[] = $row; 
} 

//assign to session var for later use, in another script 
$_SESSION['queryresult'] = $zipmatch; 

所以在這一點查詢返回的結果。得到的ArrayObject的是這樣的:

Array 
(
    [0] => stdClass Object 
    (
     [corg_id] => 1 
     [corg_name] => Acme Home Improvement 
     [corg_city] => New York 
    ) 

    [1] => stdClass Object 
    (
     [corg_id] => 2 
     [corg_name] => ABC Handy Work 
     [corg_city] => New York 
    ) 

    [2] => stdClass Object 
    (
     [corg_id] => 3 
     [corg_name] => Wile E Coyote Repairs 
     [corg_city] => New York 
    ) 
) 

輸出: 比方說,我們希望從上面的數據切片一個記錄。由於這是一個數組對象,一些循環結構將返回錯誤,因爲它們期望字符串而不是對象引用。 foreach將採用對象引用或數組。

function selected($arrObject,$searchString,$result){ 
    foreach($arrObject as $v){ 
     if ($v->corg_id==$searchString){ 
     $result[] = $v->corg_name; //string, would be index 0 
     $result[] = $v->corg_city; //string, would be index 1 
     } 
    }  
    return $result; 
    } //close selected function 

$result = array(); //array of returned search data 
$haystack = $_SESSION['queryresult']; //arrayObject to search 
$needle = 3; //look for a matching id in the arrayObject 

//instantiate an output array with the result of the selected function 
$outputArray=selected($haystack,$needle,$result); 
    $comName = $outputArray[0]; //string 
    $comCity = $outputArray[1]; //string 

echo $comName; //outputs "Wile E Coyote Repairs" 
echo $comCity; //outputs "New York" 

感謝

回答

-1

那麼什麼是你 「喜歡」,以改善?

我可以換整個PHP搜索方法等,爲一個單一的SQL查詢

SELECT corg_name, corg_city FROM sometable WHERE corg_id = '$corg_id'; 

會更容易些,而不是在PHP搜索整個數組,很多,如果你可以很容易地通過選擇只返回一個結果SQL數據庫中的ID。

+0

確實如此,但假設用戶有兩個搜索要求,一個是所有生成的商家在某個郵政編碼中,然後是第二個搜索,在這個搜索中,這是生成的郵政編碼搜索中的一個業務。 – rwhite35

+0

如果在第二次搜索中要求是「一個」業務,那麼上述邏輯不會改變。它依賴於這個PHP搜索,如果你想從任何流量中「緩解」SQL數據庫,如果是的話,這可能是一個很好的PHP搜索解決方案,否則我總是希望在SQL中搜索結果。 – dbf

+0

感謝您的反饋,好評。在這種情況下,用戶只知道一個郵政編碼。如果查詢返回結果,則他們可以選擇一個業務以獲取更多信息。你可以兩次到數據庫;或者在這個例子中,一次旅行和一次數組搜索。如果業務被某個變量所知,那麼你的方法就是正確的。 – rwhite35