我的主頁顯示一個基於當前用戶的團隊從數據庫中獲取不同數據的表。當用戶登錄時,我正在爲團隊創建一個cookie,以便在顯示錶格時閱讀。空合併運算符和SQL IN子句
當用戶沒有登錄時,我也想顯示該表,但我希望它顯示2個(或更多)團隊的數據。我使用的是臨時的解決方案,現在使用空COALESCE運營商默認爲一線隊,看起來像這樣:$team = $_COOKIE ['team'] ?? 1;
而且我的查詢:$associates = "SELECT associate_id, first_name, last_name FROM scp.associates WHERE team = '$team' ORDER BY associate_id ASC";
有什麼辦法來修改一個或兩個的這些以得到我想要的輸出?到目前爲止,我已經試過如下:
$team = $_COOKIE ['team'] ?? '1, 2';
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN ('$team') ORDER BY team ASC, associate_id ASC";
如果cookie設置和工作原理:
$team = $_COOKIE ['team'] ?? "'1', '2'";
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN ($team) ORDER BY team ASC, associate_id ASC";
時未設置的cookie,工程...我已經試過的這些其他變化,但無法讓它工作。有任何想法嗎?謝謝!
編輯:我的cookie是一個字符串,我現在正在使用預處理語句。新代碼如下所示:
$team = $_COOKIE['team'] ?? '1';
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN (?) ORDER BY team ASC, associate_id ASC";
$res_associates = odbc_prepare ($conn, $associates);
odbc_execute ($res_associates, array ($team));
當我改變'1, 2'
,我沒有得到來自DB結果。我的if (odbc_num_rows ($res_associates) > 0)
是錯誤的。
EDIT2:當我直接在我的查詢添加值,它的工作原理,但是當它需要他們從變量(準備與否)它不...
所以此工程:
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN ('1', '2') ORDER BY team ASC, associate_id ASC";
但這並不:
$team = $_COOKIE['team'] ?? " '1', '2'";
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN (?) ORDER BY team ASC, associate_id ASC";
(和「需要,因此並不認爲這是一個文件之間」的空間)
解決方案:
$team = $_COOKIE['team'] ?? '1,2';
$terms = explode (',', $team);
$placeholders = rtrim (str_repeat ('?, ', count ($terms)), ', ');
$associates = "SELECT associate_id, first_name, last_name FROM scp.associates
WHERE team IN ($placeholders) ORDER BY team ASC, associate_id ASC";
$res_associates = odbc_prepare ($conn, $associates);
odbc_execute ($res_associates, $terms);
剛確保你使用的是什麼版本的PHP? –
我正在運行PHP版本7.0.3的WAMP – IcedAnt
我通過參數化假設你的意思是準備好的語句。我意識到這一點,目前正在更新所有內容。至於你的建議,我不能說我確定你的意思。你能擴展還是提供一個例子?謝謝! – IcedAnt