2015-07-13 3 views
1

В школе мой учитель рассказал мне много о кодировании на PHP с помощью БАЗА ДАННЫХ POSTGRES. Но когда я начал использовать сервер MYSQLI, я не мог многое сделать.PHP MYSQLI fetch Ошибки

Прежде всего функции. Мой учитель сказал мне, чтобы сделать этот тип функции

$rows = getBuildings(); 
if (count($elenco) == 0) { 
    print "<hr> No buildings here </hr>"; 
} else { 
?> 
       <thead> 
        <tr> 
         <th>address</th> 
         <th>town</th> 
         <th>Manager</th> 
        </tr> 
       </thead> 
       <tbody> 
        <?php 
    foreach ($elenco as $riga) { 
?> 
         <tr> 
          <td> <?= $row->address ?></td> 
          <td> <?= $row->town ?></td> 
          <td> <?= $row->name ?> <?= $riga->surname ?> </td> 
         </tr> 
    <?php 
    } 
?> 
       </tbody> 
      </table> 
     </tbody> 
    </table> 
     <?php 
} 
?> 
     </body> 
     </html> 
    <?php 

function getBuldings() { 
    global $db; 
    $sql = "select * from buildings, boss 
     where boss.codBo=buildings.codBu"; 
    $rows = array(); 
    if (!DB::isError($tab = $db->query($sql))) { 
     while ($row = $tab->fetchRow(DB_FETCHMODE_OBJECT)) { 
      $rows[] = $row; 
     } 
    } else { 
     die("ErrorSQL:" . $tab->getMessage()); 
    } 
    return $rows; 
} 
?> 

Но чтобы он работал в MYSQL я должен был сделать много изменений. На самом деле произошла ошибка в! BD :: isError. Я должен был изменить connection.php в этом одном из

<?php 
Session_Start(); 
require_once("DB.php"); 
$db = DB::connect("pgsql:etc...."); 
if (DB::isError($db)) { 
    die("Error: " . $db->getMessage()); 
} 
?> 

к этому

<?php 
$servername = "localhost"; 
$username = "test"; 
$password = ""; 
$dbname  = "test"; 
// Create connection 
$db   = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($db->connect_error) { 
    die("Connection failed: " . $db->connect_error); 
} 
$a = mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
echo "Connected successfully " . $a . " "; 
?> 

Для того, чтобы показать результат запроса мой код стал это:

<body> 
     <?php 
$rows = getBoss(); 
if (count($rows) == 0) { 
    print "<h2>No Boss here</h2>"; 
} else { 
    foreach ($rows as $row) { 
     print "<p>" . $row['name'] . "</p>"; 
     print "<p>" . $row['surname'] . "</p>"; 
    } 
} 
?> 
     <?php 
function getBoss() { 
    global $db; 
    $sql = "select * 
      from test_boss 
      order by name, surname"; 
    $rows = array(); 
    if ($tab = $db->query($sql)) { 
     while ($row = $tab->fetch_array()) { 
      $rows[] = $row; 
     } 
     return $elenco; 
    } else { 
     die("Errore sql: " . $tab->getMessage() . ":" . $sql); 
    } 
} 
?> 
    </body> 

    </html> 

Что в фактах работает очень хорошо, но мне пришлось сменить FETCH_ROW на FETCH_ARRAY. Я больше не мог использовать метод размещения данных из значения $ rows.

<?= $row->name ?> 

Потому что произошла ошибка

Примечание: Попытка получить свойство необъектных

, но я должен был использовать

print "<p>".$row['name']."</p>"; 

Что я могу сделать для правильного использования метода FETCH_ROW?

+2

Рассмотрите возможность использования PDO, [это делает миграции между базами данных намного проще.] (Http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Почему бы вам просто не позвонить [fetch_object()] (http://php.net/manual/en/mysqli-result.fetch-object.php)? –

+0

@MarcB, используя объект, он принесет мне только объект (столбец) таблицы результатов. Я обычно принимаю несколько объектов для моих допросов. Я редактирую свой вопрос, добавляя еще одну проблему, связанную между собой. – Amicofl

ответ

0

Вы можете ввести массив в объект, слегка изменив код.

Если вы хотите получить объект в форме $row->name, тогда ваш код будет.

while ($row= $tab->fetch_array()) { 
    $rows[] = (object)$row; 
} 

ИЛИ

while ($row= $tab->fetch_object()) { 
    $rows[] = $row; 
} 
+0

В этом случае, если я хочу выбрать только объект, у меня есть этот метод. Благодаря! – Amicofl

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