簡體   English   中英

無法執行動態查詢

[英]Failing to execute dynamic query

我正在嘗試使用動態查詢從 Moodle 中的數據庫中獲取數據,但我告訴我讀取數據庫時出錯:

$parts = $_POST['make'];
$arr = explode(':', $parts);

$sql = "SELECT mdl_block_report_bbb_meeting.id,
          mdl_block_report_bbb_meeting.name, 
          mdl_block_report_bbb_meeting.create_time, 
          mdl_block_report_bbb_meeting.end_time,
          mdl_block_report_bbb_user_events.id as ueid,
          mdl_block_report_bbb_user_events.name as uename, 
          mdl_block_report_bbb_user_events.join_time, 
          mdl_block_report_bbb_user_events.left_time
        FROM mdl_block_report_bbb_meeting 
        JOIN mdl_block_report_bbb_user_events
          ON mdl_block_report_bbb_meeting.id =
             mdl_block_report_bbb_user_events.meeting_id
        WHERE uename LIKE '%$arr%'";
    
$result = $DB->get_records_sql($sql);

我究竟做錯了什么?

永遠不要直接使用$_POST ,它允許 SQL 注入。

使用optional_paramrequired_param來清理數據。

$parts = required_param('make', PARAM_TEXT);
$arr = explode(':', $parts);

$arr現在包含一個不能與LIKE一起使用的數組。

你可能想用這個

list($where, $params) = $DB->get_in_or_equal($arr, SQL_PARAMS_NAMED, 'uename');

在您的 SQL 中使用別名使其更易於閱讀和輸入。

也不要使用“mdl”,表前綴是一個可以更改的設置,所以在表名周圍使用{}括號。

$sql = "SELECT m.id,
      m.name, 
      m.create_time, 
      m.end_time,
      ue.id as ueid,
      ue.name as uename, 
      ue.join_time, 
      ue.left_time
    FROM {block_report_bbb_meeting} m
    JOIN {block_report_bbb_user_events} ue ON ue.meeting_id = m.id   
    WHERE ue.name {$where}";

// Always pass the values as params, again to avoid injection.
$result = $DB->get_records_sql($sql, $params);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM