【问题标题】:Fetching values from mySQL into a multi-dimensional array从 mySQL 获取值到多维数组中
【发布时间】:2015-11-04 00:02:22
【问题描述】:

我有一组用户提交的“搜索标签”,例如苹果、橙子、愤怒、爱情等。每组这些标签都放入一个数组中。该数组表示由唯一用户提交的一组标签。

我想获取这些标签,将它们提交到数据库中,并获取与这些标签在同一行中的相应书籍。这些书籍必须与标签具有相同类型的数组结构,以便可以在 html 脚本中将它们分配回每个用户。

例如:tagsarray[0][1] = 'love'booksarray[0][1] = 'the book corresponding to 'love''

我知道如何使用循环和推送数组来完成这项工作。我在下面写了这个脚本,但它根本不起作用。

<?php


$tags = array(array("apples","oranges", "pears"), 
              array("sun", "blood"), 
              array("anger", "love"));

$con = mysql_connect("Stories.mysql.anyhost.com", "user", "password");

mysql_select_db("Stories");

foreach ($tags as $tag) {

    $one = array();
    $two = array();

    for ($i = 0; $i < count($tag); $i++) {

        $tag_value = $tag[$i];
        $selectbooks = "SELECT * FROM Journeys 
                        WHERE book_tags = '$tag_value'";

        $query = mysql_query($selectbooks);

        while ($row = mysql_fetch_assoc($query)) {
            $one[] = $row['books'];
        }

        $two[] = $one;

    }
}

echo json_encode($two); 
// should echo out [ [books1, books2], [books3, books4], [books5, books6] ] - but instead it returns [[]] 

mysql_close($con);
?>

如果有人能查明我的脚本的问题和/或提出更好的替代方案,那就太好了。

【问题讨论】:

  • 您在查询中使用$figure_value,但从不定义它。也许应该是$tag_value
  • array("anger: 你错过了结束双引号。
  • 看看这个:stackoverflow.com/questions/1053424/…。您将能够告诉我们“根本不起作用”是什么意思。
  • @MarcB 和 caCtus,当我在这个问题中输入脚本时,这些只是错误。我已经更正了。
  • count($figure) 仍然存在。您正在计算一些不存在的东西(除非是 c/c 错误)。

标签: php mysql sql arrays multidimensional-array


【解决方案1】:

正如您显然正在学习的那样,您最好学习 mysqli_ 或 PDO 扩展,因为您在这里使用的 mysqli_ 在 PHP7 中不存在。

看到这个great reasons and assistance picking between mysqli and PDO

您的代码中绝对没有错误检查,您应该检查每个 mysql 访问函数以确保没有出错。

<?php
    // force some error reporting in case you have error reporting turned off.
    error_reporting(E_ALL); 
    ini_set('display_errors', 1);

    $tagsets = array(array("apples","oranges", "pears"), 
                     array("sun", "blood"), 
                     array("anger", "love"));

    $con = mysql_connect("Stories.mysql.anyhost.com", "user", "password");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }

    if (! mysql_select_db("Stories", $con) ) {
        die ('Can\'t select the Sories database : ' . mysql_error());
    }


    $toJson = array();  

    foreach ($tagsets as $tagset) {

        $one = array();

        foreach ( $tagset as $idx => $tag ) {

            $sql = "SELECT * FROM Journeys WHERE book_tags = '$tag'";

            $result = mysql_query($sql);
            if ( ! $result ) {
                echo mysql_error();
                exit;
            }

            while ( $row = mysql_fetch_assoc($result, $con) ) {
                $one[] = $row['books'];
            }

            $toJson[] = $one;
        }
    }
    echo json_encode($toJson); 
    mysql_close($con);
?>

【讨论】:

  • 我仍然得到这个结果的回应:[[],[],["Great Expectations"]]
  • 如果您只有符合 array("anger", "love") 搜索条件的书籍,您可能会得到这样的结果。您确定您的数据库中包含与这些标签集匹配的书籍吗?
猜你喜欢
  • 2015-05-20
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多