无法从约会中获得

时间:2016-09-05 09:26:12

标签: php mysql

如果我输入两个不同的值,我会在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;

正确的做法是什么

1 个答案:

答案 0 :(得分: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'

<强>更新

根据Magnus先生的建议,这是准备陈述的基本例子。

  

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
  }
}
?>