PHP MYSQLI获取错误

问题描述:

At school my teacher told me a lot of thing about coding in PHP using a POSTGRES DATABASE. But when I started to use MYSQLI Server i couldn't do a lot of thing.

First of all the functions. My teacher told me to do this type of function

$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;
}
?>

But to get it working in MYSQL i had to do a lot of changes. In fact there was an error in !BD::isError. I had to change the connection.php in from this one

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

to this one

<?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 . " ";
?>

In order to show the result of the query my code had become this:

<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>

That in facts works pretty well, but I had to change FETCH_ROW to FETCH_ARRAY. I could not use anymore the method of posting the data from the $rows value.

<?= $row->name ?>

Because there was an error

Notice: Trying to get property of non-object

but I had to use

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

What can I do in order to use the method FETCH_ROW corretly?

You can type cast the array to an object by tweaking the code slight.

if you want to retrieve an object in form of $row->name then your code will be.

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

OR

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