use*_*291 5 php mysql arrays blob
我有一个类型数组的变量,我想将它存储在数据库(mysql)中,当我应用tinyblob时,我通常在java中使用它来显示它返回异常输出.那么php中数组的正确数据类型是什么?
$countryGoup=array("USA","FRANCE","GERMANY","BRITAIN");
Run Code Online (Sandbox Code Playgroud)
Cra*_*nio 12
你可以:
您将CREATE TABLE语句中的列定义为SET('USA', 'France', 'Germany', ...) NOT NULL(非null可选),并使用以下查询:
INSERT INTO myTable SET countries="USA,Germany";
Run Code Online (Sandbox Code Playgroud)
所以你定义一个countries表:
id_country|name
----------+-----------
1 |USA
2 |Germany
3 |France
Run Code Online (Sandbox Code Playgroud)
并定义一个数据透视表,将您的主要对象(例如"用户")链接到国家/地区,从而实现多对多关系.
F.ex.,一个users_countries表将以这种方式将表连接users到countries表:
id_user|id_country
------------------
1 |1
1 |2
2 |1
Run Code Online (Sandbox Code Playgroud)
在此示例中,用户1链接到ID为1和2(美国和德国)的国家/地区,用户2仅链接到美国,依此类推
这涉及使用服务器端语言(在您的情况下为PHP)将值与某些分隔符(例如逗号,或管道|)连接起来:
$countries = array("USA", "Russia", "Iran");
$countriesString = implode (",", $countries); // $countriesString = "Usa,Russia,Iran"
$query = "INSERT INTO mytable SET countries = '" . $countriesString . "'";
Run Code Online (Sandbox Code Playgroud)
(注意:字符串值不会出于示例目的而被转义,但这不是一个好习惯)
当您检索从分贝值,你retrive你投入的字符串,并再次获得同一个阵列$array = explode(",", $retrievedValueFromDb),提供相同的分隔符.
更新:
您还可以依赖find_in_set(needle, field)函数,如果字符串存在于逗号分隔值字段中,则返回大于零的整数.
因此,如果您使用方法1)并且具有类似的字符串字段"USA,Germany",则可以使用以下方法获取存在的列USA:
SELECT * FROM myTable WHERE find_in_set('USA', countries) <> 0
Run Code Online (Sandbox Code Playgroud)
方法1)如果你有很少的固定值,也很容易查询.缺点是您必须限制为64个值,必须修复这些值,并且不能包含逗号(,)作为分隔符.
方法2)是最标准化和正确的,它也是规范化和查询效率的
方法3)很简单,但需要额外的处理,对SQL来说并不那么容易
如其他地方所述,dbms中没有"数组"数据类型,您必须使用一些解决方法.