Par*_*oid 10 php mysql sql arrays json
我有这个想法,我使用PHP将多/非多维数组制作成JSON字符串json_encode,并将数据存储到我的SQL数据库中.
例如,我有一个名为'users'的表.表'users'有3个字段:id,name,data
使用php,我想获取用户John的数据: SELECT data FROM users WHERE name='john'
现在'data'字段的值/文本将如下所示: {"gender":"male","birthday":"8-Jan-1991","country":"UK","city":"London"}
我将使用PHP解码'data'字段json_decode,然后我将使用我自己的一个PHP函数将stdClass对象转换为数组.然后我可以在任何地方显示John的信息:$user['data']['country'].
这使我免受榛子在国家,城市,生日等数据库上创建额外的字段.但是它安全吗?使用此方法在MySQL上存储数据是否有任何缺点或问题.
Eri*_*itz 11
正确转义,你很好,但我必须补充一点,这是XML比json更好的格式,因为它也允许你在查询中使用xml中的数据
<?xml version="1.0" encoding="UTF-8" ?>
<user>
<gender>male</gender>
<birthday>8-Jan-1991</birthday>
<country>UK</country>
<city>London</city>
</user>
Run Code Online (Sandbox Code Playgroud)
选择
SELECT ExtractValue(data, '//gender') AS gender FROM users WHERE name='john' AND EXTRACTVALUE(data, '//country') != 'UK';
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue
但它安全吗?
只要你正确地转义输入,使用适当的库来访问数据库(或者至少使用mysql_real_escape_string)然后是的,这是安全的.或者至少,在黑客攻击数据库方面,存储其他任何东西的风险并不大.
使用此方法在MySQL上存储数据是否有任何缺点或问题
是的,这里有几个:
查询"数据"列中的任何内容都是不可能的,或者至少要困难得多.假设您想要所有居住在伦敦的用户.您必须获取整个数据库中的所有"数据"列并在PHP中进行搜索.
在查询时,也无法按"数据"列中的任何内容进行排序.它必须在PHP中完成.
您必须注意确保存储的数据以正确的格式存储.无论如何你应该这样做,但它确实消除了额外的保护,防止存储"坏"数据.
看起来你已经基本上把MySQL变成了NoSQL数据库.虽然我的经验有限,但能够在一定程度上对存储的文档/ JSON数据中的数据进行索引+排序.作为关系数据库,MySQL不能:它只能对定义的列进行排序+索引.你没有使用它的任何优势,即能够运行复杂的查询,你得到了最糟糕的MySQL,缩放的难度.
话虽这么说,如果你确定你永远不需要运行这样的查询,如果你把东西存储为JSON,它可能会更容易转移到NoSQL.
编辑:如果您担心使用空列空格,您可以随时添加表格.说一个用户地址表.如果您有时可能需要每个用户使用多个地址,这实际上是一种非常友好的方式.