2016-09-05 48 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