У меня есть некоторый код 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"}
Может кто-нибудь показать мне, как это сделать?Спасибо!