2012-06-16 2 views
-2

Как преобразовать этот простой пример MySQL для объекта MySQLi ориентированного стиля:Как преобразовать простой пример MySQL в объектно-ориентированный стиль MySQLi?

$query = mysql_query("SELECT id, name FROM fruits WHERE `group`=''"); 

if ($query) { 
    while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { 
     echo $row['name']; 

     $query2 = mysql_query("SELECT name FROM fruits WHERE `group`='{$row['id']}'"); 

     if (mysql_num_rows($query2)) { 
      echo ':'; 

      while ($row2 = mysql_fetch_array($query2, MYSQL_ASSOC)) { 
       echo ' '. $row2['name'] . ','; 
      } 
      mysql_free_result($query2); 

      echo '<br>'; 
     } 
    } 
    mysql_free_result($query); 
} 

Результат:

Berries: blueberry, raspberry, strawberry, 
Citrus: grapefruit, lime, 
Pear 

Структура базы данных SELECT * FROM fruits:

id | group | name 
------------------------- 
03E7 |  | Berries 
0618 | 03E7 | blueberry 
051B | 03E7 | raspberry 
02AA | 03E7 | strawberry 
035F |  | Citrus 
07A5 | 035F | grapefruit 
0633 | 035F | lime 
05E1 |  | Pear 
+0

Вы уверены, что вы не хотите использовать PDO? http://www.php.net/manual/en/intro.pdo.php – Nebril

+0

Обычно я бы сказал http://WhatHaveYouTried.com? Но по крайней мере вы пытаетесь избавиться от 'mysql_ *' ext .. Я думаю, вам также понадобится изменить строку подключения. –

+1

Да, @ Небрил, я совершенно уверен. Я написал MySQLi, а не PDO. – Binyamin

ответ

1

Полный рабочий код:

<?php 

$mysqli = new mysqli('localhost', 'root', '', 'test'); 

$query1 = 'SELECT id, name FROM fruits WHERE `group` = \'\'';// AND id = \'03E7\' 
$query2 = 'SELECT name FROM fruits WHERE `group` = ?'; 

if ($stmt1 = $mysqli->prepare($query1)) { 
    $stmt1->execute(); 
    $stmt1->store_result(); 
    $stmt1->bind_result($id, $name); 

    while ($stmt1->fetch()) { 
     echo $name; 

     if ($stmt2 = $mysqli->prepare($query2)) { 
      $stmt2->bind_param('s', $id); 
      $stmt2->execute(); 
      $stmt2->store_result(); 
      $stmt2->bind_result($name); 

      $count = $stmt2->num_rows; 

      if ($count > 0) { 
       echo ':'; 

       $i = 1; 
       while ($stmt2->fetch()) { 
        echo ' ' . $name; 

        if($i < $count) { 
         echo ','; 
        } else { 
         echo '.'; 
        } 
        $i++; 
       } 
       $stmt2->free_result(); 
       $stmt2->close(); 
      } 
      echo '<br>'; 
     } 
    } 
    $stmt1->free_result(); 
    $stmt1->close(); 
} 

?> 

Улучшенный результат:

Berries: blueberry, raspberry, strawberry. 
Citrus: grapefruit, lime. 
Pear 
+0

Какую причину вы хотели бы переходить от MySQL к MySQLi? – Pachonk

+0

PHP Расширение MySQL устарело и рекомендуется использовать MySQLi рядом с ним. – Binyamin

+0

Да, но что именно делает его настолько устаревшим? – Pachonk

Смежные вопросы