@McThinker

Как параллельно вывести из 2х баз данные?

В php не силен, только разбираюсь, прошу подсказать как правильно вывести данные:
вот контроллер
<?php
class DBController {
	private $host = "localhost";
	private $user = "root";
	private $password = "";
	private $database = "search_airports";
	private $databaseReg = "orders";
	private $conn;
	private $connReg;

	function __construct() {
		$this->conn = $this->connectDB();
        $this->connReg = $this->connectDB();
	}

	function connectDB() {
		$conn = mysqli_connect($this->host,$this->user,$this->password,$this->database);
		return $conn;
	}
    function connectDBReg() {
        $connReg = mysqli_connect($this->host,$this->user,$this->password,$this->databaseReg);
        return $connReg;
    }

	function runQuery($query) {
		$result = mysqli_query($this->conn,$query);
		while($row=mysqli_fetch_assoc($result)) {
			$resultset[] = $row;
		}
		if(!empty($resultset))
			return $resultset;
	}
    function runReqlament($reqlament) {
        $result2 = mysqli_query($this->connReg,$reqlament);
        return $result2;
    }
	function numRows($query) {
		$result  = mysqli_query($this->conn,$query);
		$rowcount = mysqli_num_rows($result);
		return $rowcount;	
	}
    function numRowsReg($reqlament) {
        $result2  = mysqli_query($this->connReg,$reqlament);
        $rowcount = mysqli_num_rows($result2);
        return $rowcount;
    }
}
?>


Вот вывод:

<?php
require_once("dbcontroller.php");
$db_handle = new DBController();
$reqlament = "SELECT id, servicename, Reglament FROM cs_service WHERE id";

if(!empty($_POST["keyword"])) {
    $query ="SELECT DISTINCT(city_name), country_name, highway FROM country WHERE city_name like '" . $_POST["keyword"] . "%' ORDER BY city_name LIMIT 0,5";

    $result = $db_handle->runQuery($query);
    $result2 = $db_handle->runReqlament($reqlament);
    if(!empty($result)) { ?>
        <ul id="country-list">
            <?php
            foreach($result as $country) {
                ?>
                <li onClick="selectCountry('<?php echo $country["city_name"]; ?> (<?php echo $country["country_name"]; ?>) <?php
                     if($country["highway"] == 1) echo "- внутренний рейс";
                elseif ($country["highway"] == 2) echo "- средняя магистраль";
                elseif ($country["highway"] == 3) echo "- дальняя магистраль";
                elseif ($country["highway"] == 4) echo "- экзотическое направление";?>'); "><?php echo $country["city_name"]; ?> (<?php echo $country["country_name"]; ?>)</li>
            <?php } ?>
        </ul>
        <?php
    }
    if(!empty($result2)) { ?>
        <p id="reglament">
            <?php
            foreach($result2 as $cs_service) {
                ?>
                <span><?php echo $cs_service["servicename"]; ?></span>
            <?php } ?>
        </p>
        <?php
    }
}
?>


Вместо "- внутренний рейс" мне нужно тянуть данные из $reqlament, но проблема в том, что не знаю как правильно сделать foreach в foreach. Вообщем прошу подсказать
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) Не надо называть контроллером то, что им не является.
2) Если у вас 2 дб - не надо в одном объекте их инициализировать, нужно создать 2 объекта (по 1 на дб) со своими настройками.
3) WHERE id - просто шикарное условие.
4) $_POST, $_GET и вообще сырые данные приходящие с фронтенда в запросы вставлять категорически нельзя. Во первых их надо хотя бы базово валидировать, во вторых для этого есть prepared statements.
5) Чем вообще обусловлено разделение данных на 2 базы? Похоже что вы что-то не так делаете изначально, на уровне проектирования структуры данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Nengchak
spoiler
if($country["highway"] == 1) {
    foreach($result2 as $req) {
     //...
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы