如何通过匹配(字符串到数组和数组到数组)从 mysql 存储和检索数组数据 我在从 MySQL 获取数据时遇到问题

将数据库存储为逗号分隔的字符串,我想从逗号分隔的字符串中检索数据。

https://code.sololearn.com/wKW8F3caReUY/?ref=app

这段代码是否正常工作bcz它没有向我显示所需的结果

//$userData['city'] = 27 //db中的城市保存为12,33,9,2,1,27,31

    //$userData['hobbies'] = 3,24
    //hobbies in db have values as 3,24,17,31

    // how to i match these records/arrays by my sql db records

    $SQL = "SELECT * FROM users_stats WHERE 
    type = '1'
    AND
    (
        ".in_array( $userData['city'],explode(",","'cities'") )."
        OR
        cities IN('all','pak')
    )
    AND
    (
        time = ".$currentTime." OR time = 'all'
    )
    AND
    (
        ".((array_intersect( explode(",$userData['hobbies']),"'hobbies'")) != null)?1:0)."
    )
    ";
mxmkeai 回答:如何通过匹配(字符串到数组和数组到数组)从 mysql 存储和检索数组数据 我在从 MySQL 获取数据时遇到问题

你混淆了单独的环境。
PHP 有它自己的环境。
数据库有自己的环境。

从sql中获取数据的基本流程:
build sql query text -> send to database server -> parse the sql text,execute sql query -> return data back to php

在你的 php 代码中

".in_array( $userData['city'],explode(",","'cities'") )."

你构建的sql,想把数据库中的cities列炸开,但是此时sql还没有执行,看来你是想在数据库环境下执行php。
explode 是一个 php 函数,我猜你知道,此时 cities 只是一个字符串,而不是一个包含数据的数据库列。
php 执行后,字符串将解析为 (即 false)。

解决办法,mysql中没有简单的方法可以操作数组(其他数据库也可以操作数组),所以简单的方法就是把cities列返回给php,然后foreach过滤你想要的数据

本文链接:https://www.f2er.com/12580.html

大家都在问