[英]MySQL Query not returning specific search parameters via php script
我有一個 php 驅動頁面,允許我輸入搜索參數。 其中一個數字是由多個數字組成的 ID。 當我用這些特定數字搜索一個時,它會返回所有結果。
我在 phpmyadmin 和 SQL 終端中做了完全相同的聲明,它只返回我搜索的項目。 所以我想問題出在我用來提交基於 html 表單的搜索查詢的 PHP 上。
帶有狀態選項的下拉菜單工作正常 - 任何需要輸入的字段都不需要。
此外,我確定這些字段正在提交到數據庫,因為我可以在 phpadmin 中查看它們並使用它們完成 SQL 語句
輸入 NumericIdentider 並選擇所有默認狀態時編輯回顯結果: Select * From Table Where Closed != ' '
<?php
if($_REQUEST['Search']) {
$sql = "SELECT";
if(strlen($_REQUEST['NumericIdentifier']) > 0) {
$sql .= " * FROM Table Where NumericIdentifier = ".$_REQUEST['NumericIdentifier'];
}
if(strlen($_REQUEST['BeginDate']) > 0) {
$sql .= " * From Table Where TDate >= {$_REQUEST['BeginDate']}";
}
if(strlen($_REQUEST['EndDate']) > 0) {
$sql .= " * From Table Where TDate <= {$_REQUEST['EndDate']}";
}
if($_REQUEST['Status'] == 'Shipped') {
$sql .= "* From Table Where Closed = 'true' ";
}
if($_REQUEST['AreaCode'] > 0) {
$sql .= " * From Table Where AreaCode = {$_REQUEST['AreaCode']}";
}
if($_REQUEST['Status'] == 'Recieved') {
$sql .= " * From Table Where Closed != 'true'";
}
if($_REQUEST['Status'] == 'All') {
$sql = "Select * From Table Where Closed != '\0'";
}
} else {
$sql = "SELECT * FROM Tickets";
}
$res = mysql_query($sql, $conn1);
while($a = mysql_fetch_array($res)) {
echo "<tr><td> <a href='ticket.php?id=".$a['id']."'>".trim($a['id'])."</a> </td> \n <td> ".$a['Name']."</td> \n <td>".date("m/d/Y", strtotime($a['TicketDate']))."</td> \n <td>".$a['Issue']."</td> \n <td>".Showstatus($a['Closed'])." </td></tr>";
} ?>
</table>
</body>
</html>
是的,你的 SQL 永遠不會工作。 假設用戶同時輸入了 BeginDate 和 EndDate,您的查詢將是
SELECT
* From Table Where TDate >= {$_REQUEST['BeginDate']}
* From Table Where TDate <= {$_REQUEST['EndDate']}
即使日期以 MySQL 格式 (YYYY-MM-DD) 正確輸入,它仍然會顯示為
SELECT
* FROM Table Where TDate >= 01/01/2011
* FROM Table Where TDate <= 31/12/2011
請注意,日期周圍沒有引號。 MySQL 會將這些“日期”視為數字,被划分,所以你說TDate >= 0.0004972...
和TDate <= 0.001284...
最重要的是,說* from table
兩次也是非法的語法。
您的代碼顯然沒有檢查錯誤狀態。 絕對最低限度,您應該擁有:
$result = mysql_query($sql) or die(mysql_error());
這將准確地告訴您您構建的查詢有什么問題。
而且,最糟糕的是,正如其他人所說,你完全開放並且容易受到 SQL 注入攻擊,但我不會 go 進入那個......你的查詢已經如此絕望,以至於注入攻擊是最少的你的煩惱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.