【发布时间】:2020-01-28 05:04:28
【问题描述】:
我编写了一些功能完美的 MySQL 代码:
<?php
include 'dbconfig.php';
$startdate = date("Y-m-d", strtotime($_GET['startdate']));
$class = ($_GET['class']);
$city = ($_GET['city']);
$coverage = ($_GET['coverage']);
$sql="SELECT day, week, month FROM pricing
WHERE '" . $startdate . "' between start_date AND end_date and class='" . $class . "' and city='" . $city . "' and coverage='" . $coverage . "'";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)) {
$date_ranges = array(
'day' => $row['day'],
'week' => $row['week'],
'month' => $row['month']
);
mysqli_close($conn);
}
$json = json_encode($date_ranges);
echo $json;
?>
但是,我被告知使用 PDO 更安全,所以我将代码转换为 PDO,并且我做到了这一点:
<?php
include 'dbconfig.php';
$startdate = date("Y-m-d", strtotime($_GET['startdate']));
$class = ($_GET['class']);
$city = ($_GET['city']);
$coverage = ($_GET['coverage']);
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT day, week, month FROM pricing
WHERE :startdate between start_date AND end_date and class=:class and city=:city and coverage=:coverage");
$stmt->bindParam(':startdate', $startdate);
$stmt->bindParam(':class', $class);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':coverage', $coverage);
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
问题肯定是这样的:
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
我试图让输出看起来像这样(与第一个相同):
{"day":"35","week":"150","month":"650"}
有人可以告诉我如何完成这个吗?谢谢!
【问题讨论】:
-
什么是
TableRows?你为什么使用RecursiveArrayIterator? -
没什么——我只是不太了解 PDO,我正在使用我找到的教程来学习它,这是默认示例。
-
啊,我明白了。我认为您在这里所做的事情可能过于复杂。
-
什么意思?
-
无论你在网上找到什么教程,请放弃它。您展示的两个代码示例都充满了可疑的代码。试试phpdelusions.net/pdo