有时会在数据表中保存一个serizlie()过的一个php的array变量字符串,当需要使用SQL语言取出某个key的值时可以用到。比如: a:3:{s:1:a;s:12:asdfasdfasdf;s:1:b;i:123123123;s:1:c;s:8:ASDFASDF;} 需要从中取出key是b的内容。 MySQL delimiter $$create functi
有时会在数据表中保存一个serizlie()过的一个php的array变量字符串,当需要使用SQL语言取出某个key的值时可以用到。比如:delimiter $$
create function get_from_serialized_json
( in_string varchar(255),
in_key varchar(255) )
returns varchar(255)
BEGIN
return trim( '"' from
substring_index(
substring_index(
substring(trim("}" FROM in_string ), locate(concat("\"",in_key,"\""), in_string )+1
) , ";",2
), ":",-1 )) ;
END$$mysql> show create function get_from_serialized_json\G
*************************** 1. row ***************************
Function: get_from_serialized_json
sql_mode:
Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `get_from_serialized_json`( in_string varchar(255),
in_key varchar(255) ) RETURNS varchar(255) CHARSET latin1
BEGIN
return trim( '"' from
substring_index(
substring_index(
substring(trim("}" FROM in_string ), locate(concat("\"",in_key,"\""), in_string )+1
) , ";",2
), ":",-1 )) ;
END
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
<?php
$a = array('a'=> 'asdfasdfasdf', 'b'=> 123123123, 'c'=> 'ASDFASDF');
echo serialize($a);
mysql> set @a ='a:3:{s:1:"a";s:12:"asdfasdfasdf";s:1:"b";i:123123123;s:1:"c";s:8:"ASDFASDF";}';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select get_from_serialized_json(@a,"a");
+----------------------------------+
| get_from_serialized_json(@a,"a") |
+----------------------------------+
| asdfasdfasdf |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select get_from_serialized_json(@a,"b");
+----------------------------------+
| get_from_serialized_json(@a,"b") |
+----------------------------------+
| 123123123 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select get_from_serialized_json(@a,"c");
+----------------------------------+
| get_from_serialized_json(@a,"c") |
+----------------------------------+
| ASDFASDF |
+----------------------------------+
1 row in set (0.00 sec)
mysql>
mysql> drop function get_from_serialized_json ;
Query OK, 0 rows affected (0.00 sec)
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号