如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题
Posted
技术标签:
【中文标题】如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题【英文标题】:how to store and retrive array data from mysql by match (string to array AND array to array) i have problem in fetching data from MySQL 【发布时间】:2021-10-05 14:59:40 【问题描述】:将 db 存储为逗号分隔的字符串,我想从逗号分隔的字符串中检索数据。
https://code.sololearn.com/wKW8F3caReUY/?ref=app
此代码是否正常工作,因为它没有向我显示所需的结果
//$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']) , explode(",", "'hobbies'")) != null)?1:0)."
)
";
【问题讨论】:
我没有看到使用准备好的语句。 ***.com/questions/3653462/… 【参考方案1】:您混淆了单独的环境。 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
过滤数据你想要的
【讨论】:
以上是关于如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?