2016-09-05 46 views
-1

得到,如果我進入我得到在FROM_DATE值的日期TO_DATE值無法從日期

$to_date=$_POST['date']; 
$from_date=$_POST['date']; 
$query="SELECT * FROM reports WHERE date BETWEEN $from_date AND $to_date"; 
$query_run = mysql_query($query); 
$qty= 0; 
while ($num = mysql_fetch_assoc ($query_run)) { 
    $qty += $num['amount']; 
} 
echo $qty; 

什麼是做

+0

SELECT SUM(數量)和FROM .... –

+0

像' 「SELECT * FROM報告WHERE日之間的 '$ FROM_DATE' 和 '$ TO_DATE'」;'缺失報價 – devpro

+0

1.唐不使用已棄用的'mysql_ *'函數。它們自PHP 5.5起棄用,並在PHP 7中完全刪除。請改用MySQLi或PDO。 2.你對[SQL Injections](http://php.net/manual/en/security.database.sql-injection.php)非常開放,並且應該使用[Prepared Statements](http://php.net) /manual/en/mysqli.quickstart.prepared-statements.php)而不是連接你的查詢,如果你使用上面提到的MySQLi或PDO,可以使用它們。 –

回答

1

首先以正確的方式,使用mysqli_*或兩個不同的值PDO,因爲mysql_*已棄用並且在PHP 7中關閉。

在代碼中,您需要在$from_date$to_date之間使用引號。

還有一件事,如果你的開始和結束日期相同,不知道你爲什麼使用BETWEEN,你可以簡單地使用=

這裏是你的代碼中使用MYSQLi Object Oriented完整的示例:

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$to_date = $conn->real_escape_string($_POST['date']); 
//$from_date = $conn->real_escape_string($_POST['date']); 

$sql = "SELECT * FROM reports WHERE date = '$to_date'"; 
$result = $conn->query($sql); 

$qty = 0; 
if ($result->num_rows > 0) { 
    /* fetch associative array */ 
    while ($row = $result->fetch_assoc()) { 
     $qty += $row['amount']; 
    } 
    echo $qty; 
} 
else 
{ 
    echo "No record found"; 
} 
$conn->close(); 
?> 

還要注意的是,如果這個查詢僅僅是用於獲取總量沒有其他用途,但您可以使用您的查詢,如:

SELECT SUM(amount) FROM reports WHERE date = '$to_date' 

更新:

由於根據馬格納斯先生的建議,這裏是預備陳述的基本例子。

From the Manual:用戶輸入自動引用,因此 不存在SQL注入攻擊的風險。

<?php 
$sql = "SELECT * FROM reports WHERE date = ?"; 
$stmt = $conn->prepare($sql); 
if ($stmt->execute(array($_POST['date']))) { 
    while ($row = $stmt->fetch()) { 
    // your stuff 
    } 
} 
?> 
+0

這是一個很好的答案。我將改變的唯一事情就是使用預處理語句而不是連接查詢字符串。轉義字符串並不能100%保證您不會注入。準備好的陳述。 –

+0

@MagnusEriksson:同意你的意見,100% – devpro