【问题标题】:Basic mysqli select基本 mysqli 选择
【发布时间】:2012-10-24 11:03:26
【问题描述】:

我有一个 select 语句,我想从表中获取所有行,但似乎有精神障碍 - 这应该是基本的东西,但似乎无法让它工作。

“postage_price”表中只有两行 - 和两列:价格 |参考

选择语句如下:

$get_postage="SELECT price FROM postage_price ORDER BY ref DESC";
$get_postage_result=mysqli_query($dbc, $get_postage) or die("Could not get postage");
while($post_row=mysqli_fetch_array($dbc, $get_postage_result))
{
$post1[]=$post_row;
}

然后我试图将结果回显:

echo $post1['0'];
echo $post1['1'];

这没有显示任何内容。我的头痛也没有用。

【问题讨论】:

  • 它没有显示任何内容或显示ArrayArray
  • 什么都没有——我只需要将价格列中的两个值放入一个数组中,然后在页面中进一步列出这些值。

标签: php mysql select mysqli


【解决方案1】:

如果某些内容在 PHP 脚本中不起作用,您可以做的第一件事就是获得更多知识。你已经写了

echo $post1['0'];
echo $post1['1'];

什么都不显示。只有当这些值为NULLFALSE 或空字符串时才会出现这种情况。

所以下一步是先查看$post1

var_dump($post1);

通过转储变量。

另一个步骤是在脚本之上启用错误显示和报告至最高级别,以便了解潜在问题所在:

ini_set('display_errors', 1); error_reporting(~0);

您也可以使用 PHP 5.4(第一部分也适用于旧的当前 PHP 5.3,foreach 不支持,但您可以让 query() 返回可以支持的内容)并稍微简化您的脚本,就像这样:

class MyDB extends mysqli
{
    private $throwOnError = true; # That is the die() style you do.

    public function query($query, $resultmode = MYSQLI_STORE_RESULT) {
        $result = parent::query($query, $resultmode);
        if (!$result && $this->throwOnError) {
            throw new RuntimeException(sprintf('Query "%s" failed: (#%d) %s', $query, $this->errno, $this->error));
        }
        return $result;
    }
}

$connection = new MyDB('localhost', 'testuser', 'test', 'test');
$query      = 'SELECT `option` FROM config';
$result     = $connection->query($query);
foreach ($result as $row) {
    var_dump($row);
}

【讨论】:

    【解决方案2】:
    while($post_row = mysqli_fetch_array($dbc, $get_postage_result))
    {
        $post1[] = $post_row['price'];
    }
    

    如您所见:$post_row 在这一行中:= mysqli_fetch_array($dbc, $get_postage_result) 是一个数组。您正在尝试将整个数组值保存到块中的另一个数组中。 :)

    编辑

    while($post_row = mysqli_fetch_array($get_postage_result))
    ...
    

    【讨论】:

    • 不正确 - 但你已经向我展示了我的明显错误 - mysqli_fetch_array 中的 $dbc 不应该存在。我知道这是一个基本错误导致停止工作:) 也许我今天早上开始工作太早了......
    • 不,这一直是我的错误 - 在星期日编码应该是非法的 :)
    • @Sideshow:如果您厌倦了一直记住参数(更少的参数=更少的错误),就这样做:$post_row = $get_postage_result->fetch_array()。请参阅php.net/mysqli-result.fetch-array - 它可以与您的代码一起使用。 $dbc->query($get_postage)mysqli_query 相同。仅供参考。
    【解决方案3】:

    在您的帮助下,我发现了错误 - 它在 mysqli_fetch_array 中,我有 $dbc,这不是必需的。

    $get_postage="SELECT price FROM postage_price ORDER BY ref DESC";
    $get_postage_result=mysqli_query($dbc, $get_postage) or die("Could not get postage");
    while($post_row=mysqli_fetch_array($get_postage_result))
    {
    $post1[]=$post_row['price'];
    }
    

    代替:

    $get_postage="SELECT price FROM postage_price ORDER BY ref DESC";
    $get_postage_result=mysqli_query($dbc, $get_postage) or die("Could not get postage");
    while($post_row=mysqli_fetch_array($dbc, $get_postage_result))
    {
    $post1[]=$post_row['price'];
    }
    

    对我来说糟糕的一天:(

    谢谢大家

    【讨论】:

      【解决方案4】:

      您有 $post1[]=$post_row;$post_row 本身就是一个数组。因此,您可以通过以下方式访问帖子数据:$post1[NUMBER][0] 其中NUMBER 是 $post1 数组索引,[0] 是 mysqli_fetch_array 返回的 $post_row 的 0 索引。

      您可能想在代码中使用$post1[]=$post_row[0]; 以避免出现数组数组。

      【讨论】:

        【解决方案5】:

        您将 1 和 0 作为字符串索引传递,这仅在您的数据库中有一个名为 0 或 1 的列时才有效。您需要将它们作为数字索引传递。

        试试:

        print_r($post1[0]);
        print_r($post1[1]);
        

        print_r($post['price']);
        print_r($post['ref']);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多