$ row ['']在准备好的语句PHP中

时间:2016-12-28 16:32:06

标签: php mysqli

我试图更改我的mysqli代码以使用预准备语句。

出于某种原因,我无法通常$row['']工作。我用谷歌搜索了一段时间,但我还没有得到它。没有预备语句的代码是这样的:

if($result = mysqli_query($con,"SELECT * FROM users")) {
        echo "
            <thead>
                <tr>
                <th>1</th>
                <th>2</th>
                <th>3</th>
                <th>4</th>
                <th>5</th>
                </tr>
            </thead>
            <tbody>";
        while($row = mysqli_fetch_array($result)) {
            if($row['status'] == "1") {
                echo '<tr class="active">';
            } elseif($row['status'] == "2") {
                echo '<tr class="success">';
            } elseif($row['status'] == "0") {
                echo '<tr class="danger">';
            } else {
                echo '<tr class="warning">';
            }
     etc...

这是我到目前为止准备好的陈述:

$grab_user = $db->prepare("SELECT * FROM users");
if($grab_user->execute()) {
    echo "
        <thead>
            <tr>
            <th>1</th>
            <th>2</th>
            <th>3</th>
            <th>4</th>
            <th>5</th>
            </tr>
        </thead>
        <tbody>";

    while($grab_user->fetch()) {
        $row = $grab_user->fetch_row();

        if($row['status'] == "1") {
            echo '<tr class="active">';
        } elseif($row['status'] == "2") {
            echo '<tr class="success">';
        } elseif($row['status'] == "0") {
            echo '<tr class="danger">';
        } else {
            echo '<tr class="warning">';
        }

显然它似乎不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

fetch_row从结果集中获取一行数据并将其作为枚举数组返回,其中每列存储在从0(零)开始的数组偏移中。

所以它应该像$row[0]。找出状态索引,然后使用适当的值。

如果您需要使用列名访问,则需要使用fetch_assoc

像这样:

while($row=$grab_user->fetch_assoc()) {    
    if($row['status'] == "1") {
        echo '<tr class="active">';
    } elseif($row['status'] == "2") {
        echo '<tr class="success">';
    } elseif($row['status'] == "0") {
        echo '<tr class="danger">';
    } else {
        echo '<tr class="warning">';
    }
}

fetch_row - 数字数组

fetch_assoc - 关联数组

答案 1 :(得分:1)

如果你想要一个关联数组,你应该使用fetch_assoc(),而不是fetch_row(),它返回一个数字数组。

此外,您不应该在循环中同时调用fetch()fetch_assoc()。它们中的每一个都将读取下一行,因此fetch_assoc()将只获取结果的每一行。所以它应该是:

while ($row = $grab_user->fetch_assoc()) {
    ...
}