За последние 24 часа нас посетили 17534 программиста и 1728 роботов. Сейчас ищут 1008 программистов ...

Одновременные запросы MSQLi

Тема в разделе "PHP и базы данных", создана пользователем Den Wotton, 5 фев 2017.

  1. Den Wotton

    Den Wotton Новичок

    С нами с:
    3 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    имеет ли смысл такой код или это вообще нереально сделать так , не до конца понимаю природу запросов в Mysql
    PHP:
    1. function search($pattern){
    2.   $mysqli = new mysqli ("localhost", "root", "", "dbname");
    3.   if ($mysqli->connect_errno) {
    4.     printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
    5.     exit();
    6.   }
    7.   $query = "SELECT * FROM dbname.template";
    8.   $result = mysqli_query($mysqli,$query);
    9.     while($row = mysqli_fetch_assoc($result)){
    10.           if(preg_match("/$pattern/", $row['title']) or preg_match("/$pattern/", $row['content'])){
    11.             $query2 = "SELECT * FROM dbname.content";
    12.             $result2 = mysqli_query($mysqli,$query2);
    13.             while($row2 = mysqli_fetch_assoc($result2)){
    14.               if($row['title'] == $row2['title']){
    15.                 $updateResultContent = " UPDATE `dbname`.`content` SET `title` = ".$row['title'].", `pubDate` = ".$row['pubDate'].", `content` = ".$row['content']." ";
    16.                   $mysqli->query ($updateResultContent);
    17.               }
    18.               else {
    19.                 $resultContent = "INSERT INTO `dbname`.`content` (`id`, `title`, `pubDate`, `content`)
    20.                  VALUES (NULL,'".$row['title']."','".$row['pubDate']."','".$row['content']."')";
    21.                   $mysqli->query ($resultContent);
    22.  
    23.               }
    24.  
    25.             }
    26.           }
    27.     }
    28.   $mysqli->close();
    29. }
     
  2. Den Wotton

    Den Wotton Новичок

    С нами с:
    3 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    Конкретно проблема в том что я не могу понять вот есть у меня цикл
    Код (Text):
    1. while($row = mysqli_fetch_assoc($result))
    достает 1 поле с бд в виде ассоциативного массива проверяет на соответствие , если находит , идет цикл
    Код (Text):
    1. while($row2 = mysqli_fetch_assoc($result2)){
    который тоже достает 1 поле в виде ассоциативного массива проверяет равно ли значение с ключом 'title' массива $row значению с ключом 'title' массива $row2 (сразу первый вопрос можно ли так сравнивать как это сделал я
    Код (Text):
    1. if($row['title'] == $row2['title'])
    если нет то как правильно подскажите( и да тип данных там string)) , и если сходиться то он просто перезаписывает значения полей
    PHP:
    1. $updateResultContent = " UPDATE `dbname`.`content` SET `title` = ".$row['title'].", `pubDate` = ".$row['pubDate'].", `content` = ".$row['content']." ";
    2.                   $mysqli->query ($updateResultContent);
    а если нет то просто идет дальше и забрасывает в новою таблицу таблицу то что соответствует первому сравнению.
    Вопрос №2
    Если методом mysqli_fetch_assoc
    начинать доставать поля с пустой таблицы что тогда происходит ? оно просто возвращает 0 и все код идет дальше ?
    Вопрос №3
    Надо ли заново коннектица к бд во втором цикле while?
    Вопрос №4
    могут ли вообще одновременно перебираться 2 таблицы бд таким образом как я представил , если нет то каким может
    Вопрос №5
    Вообще я хочу избежать повторений во второй таблице то есть "content" и решил сделать таким хоть и туповатым способом, также принял бы ваше видение решение проблемы.
    P.S.
    В моем коде возможны даже самые детские ошибки , заранее извиняюсь
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Во-первых, никакие сравнения не идут. Оператор "=" это оператор присвоения, а не сравнения. Эта конструкция работает по такой логике:
    1) У нас есть while. В его условии должно быть лино true либо false.
    2) В этом самом условии мы забираем из очереди строку. И тут же присваиваем ее некоей переменной $row, чтобы она не "в воздух" отдалась.
    3) Так как while ждет от нас тип bool, полученное значение принудительно кастится к нему.
    4) Если строка существует, то конвертируется в true, и цикл отрабатывает. Если выбрали все строки, то функция вернет false. Все, цикл оборвался.

    Вот и вся магия. Просто вытаскиваем строки по одной, пока не кончатся.