首先以正确的方式,使用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
}
}
?>
SELECT SUM(数量)和FROM .... –
像' “SELECT * FROM报告WHERE日之间的 '$ FROM_DATE' 和 '$ TO_DATE'”;'缺失报价 – devpro
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,可以使用它们。 –