2017-10-13 50 views
0

是否有可能從表中檢查變量是數組的表中的數據?PHP是否有可能從表中檢查變量是數組的表中的數據?

例子:

$allowedIP = array(); 
$qChkIP = oci_parse($c1, "SELECT ALLOWED_IP_ADDRESS FROM WA_BT_TBL_PROFILE WHERE ACTIVE = 'Y'"); 
oci_execute($qChkIP); 
while($dChkIP = oci_fetch_array($qChkIP)) 
{ 
    $allowedIP = array_merge($allowedIP, array_map('trim', explode(',', $dChkIP['ALLOWED_IP_ADDRESS']))); 
} 

的print_r $ allowedIP

Array ([0] => 192.168.183.205 [1] => 192.168.184.20 [2] => 192.168.184.15 [3] => 192.168.183.28) 

我現在的IP地址是:192.168.183.28

,現在我想從表中獲取詳細信息,其中ALLOWED_IP_ADDRESS = $allowedIP

SELECT P.ALLOWED_IP_ADDRESS, P.PROFILEID, P.PROFILE_NAME, P.LOCATIONID_FK, L.LOCATIONID, L.LOCATIONNAME FROM WA_BT_TBL_PROFILE P, WA_GA_TBL_LOCATIONS L WHERE P.LOCATIONID_FK = L.LOCATIONID AND P.ACTIVE = 'Y' AND P.ALLOWED_IP_ADDRESS IN (".implode(',',$allowedIP).") 

但沒有結果。

修訂

DATA

PROFILEID PROFILE_NAME  ACTIVE DATEADDED    ADDEDBY LOCATIONID_FK ALLOWED_IP_ADDRESS 
PF0001  Normal Working Day Y  9/30/2017 5:53:39 PM US0001 LC0001   192.168.183.205 
PF0004  Ramadhan   N  10/12/2017 10:38:02 AM US0001 LC0003 
PF0002  Ramadhan   N  9/30/2017 5:55:50 PM US0001 LC0001   192.168.183.205 
PF0003  Normal Working Day Y  10/3/2017 5:23:05 PM US0001 LC0003   192.168.184.20, 192.168.183.28 

我用這個方法從蘭德爾

"... P.ALLOWED_IP_ADDRESS IN ('".implode("','",$allowedIP)."') ..." 

,我可以看到的數據,但結果是不正確的。我得到了「PF0001」,應該是「PF0003」

+1

因此,你有多個值在數據庫列中逗號分隔?相反,不好的數據建模,請閱讀規範化。您可以使用FIND_IN_SET來「搜索」這樣的列中的值,但是您需要單獨爲陣列中的每個IP地址執行此操作。 – CBroe

+0

是啊...因爲PF0003在一個單元中有兩個IP,用逗號...搜索只是不會在那裏工作,或者是可靠的。您應該使用PROFILEID和每行一個IP進行輔助多對一查找表。搜索查找表,使用找到的ID從主WA_BT_TBL_PROFILE表中提取一個結果。 – IncredibleHat

回答

1

你需要單引號每個IP在「IN」的價值,你必須:

"... P.ALLOWED_IP_ADDRESS IN (".implode(',',$allowedIP).") ..." 

這將使這樣的事情(這是無效的SQL ):

P.ALLOWED_IP_ADDRESS IN (11.11.11.11,22.22.22.22,33.33.33.33) 

一個基本的方法是這樣的:

"... P.ALLOWED_IP_ADDRESS IN ('".implode("','",$allowedIP)."') ..." 

爲(更有效的SQL),從而結束了:

P.ALLOWED_IP_ADDRESS IN ('11.11.11.11','22.22.22.22','33.33.33.33') 

如果您想清理數據以確保安全,您可以更多地參與,但我認爲這超出了答案的需要。

+0

嗨@Randall我試過你的方法。請看我更新的問題 –

+0

好的,所以一半的戰鬥覆蓋!只需要弄清楚爲什麼數組搜索不能拉出正確的記錄?考慮到$ allowedIP包含PF0001所涵蓋的IP,它將所有匹配的記錄拉出。因此,$ allowedIP的(重新)構建就是包含你不想要的IP。 – IncredibleHat

相關問題