将mySQL中的值提取到多维数组中

时间:2015-08-11 16:32:32

标签: php mysql sql arrays multidimensional-array

我有一系列搜索标签'由我的用户提交,例如苹果,橘子,愤怒,爱等。每组这些标签都放入一个数组中。该数组表示由唯一用户提交的一组标记。

我想获取这些标记,将它们提交到数据库中,然后在与这些标记相同的行中获取相应的书籍。这些书必须与标签具有相同类型的阵列结构,以便可以将它们分配回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);
?>

如果有人可以通过我的脚本查明错误和/或提出更好的替代方案,那就太好了。

1 个答案:

答案 0 :(得分:0)

  

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

     

对于某些great reasons and assistance picking between mysqli and PDO

,请参阅此内容

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

<?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);
?>