是否有可能從表中檢查變量是數組的表中的數據?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」
因此,你有多個值在數據庫列中逗號分隔?相反,不好的數據建模,請閱讀規範化。您可以使用FIND_IN_SET來「搜索」這樣的列中的值,但是您需要單獨爲陣列中的每個IP地址執行此操作。 – CBroe
是啊...因爲PF0003在一個單元中有兩個IP,用逗號...搜索只是不會在那裏工作,或者是可靠的。您應該使用PROFILEID和每行一個IP進行輔助多對一查找表。搜索查找表,使用找到的ID從主WA_BT_TBL_PROFILE表中提取一個結果。 – IncredibleHat