Як ўставіць і атрымаць значэнне масіва з базы дадзеных MySQL з PHP?

Такім чынам, у мяне ёсць PHP масіў «$ сумесна» са значэннямі [0, 1, 2] (я проста выкарыстоўваць гэта ў якасці прыкладу). Я хачу, каб ўставіць і атрымаць гэты масіў з маёй базы дадзеных MySQL, але не працуе.

У цяперашні час я выкарыстоўваю гэты код, каб ўставіць яго:

mysqli_query($dbhandle, "INSERT INTO table (arraytest) VALUES ('$shared')");

І пасля таго, як прыведзены вышэй код значэння ў «табліцы» ў калонцы «arraytest» ёсць «масіў» замест [0, 1, 2] або як масіў павінен выглядаць у базе дадзеных MySQL.

Пасля ўстаўкі масіва ў маёй базе дадзеных, я хачу, каб атрымаць яго, і ў цяперашні час з дапамогай гэтага кода:

$id='2';

$result = mysqli_query($dbhandle, "SELECT arraytest FROM table");

while ($row = mysqli_fetch_array($result)) {

$shared=$row{'arraytest'};

if(in_array($id, $shared)){

    echo 'Value is in the array. Success!';

}

}

Я зрабіў некаторыя даследаванні ў Інтэрнэце, і не знайшлі спосаб зрабіць гэта адмыслова.

Я хачу, каб ўставіць PHP масіў() у адну вочка ў табліцы ў базе дадзеных, і я хачу, каб атрымаць гэты масіў з базы дадзеных і праверыць, калі пэўнае значэнне ў масіве, які я раней устаўлены ў базу дадзеных.

пастскрыптум Я не спрабую атрымаць цэлы слупок значэнняў з базы дадзеных у выглядзе масіва. Гэта тое, што я знайшоў на Google, калі я шукаць адказ, і гэта не тое, што я хачу зрабіць.

3
як правіла, не рэкамендуецца, варта захоўваць кожнае значэнне масіва асобна. але калі <�я> павінен </я> Выкарыстанне серыялізацыя ()
дададзена аўтар user557846, крыніца
як правіла, не рэкамендуецца, варта захоўваць кожнае значэнне масіва асобна. але калі <�я> павінен </я> Выкарыстанне серыялізацыя ()
дададзена аўтар user557846, крыніца

7 адказы

У мяне ёсць пытанне, чаму вы хацелі б гэта зрабіць, але самы просты адказ сериализовать масіў.

"INSERT INTO table (arraytest) VALUES ('" . serialize($shared) . "')"

Затым вы можаце выкарыстоўваць десериализации пры выманні яго з базы дадзеных


Вы павінны правільна параметризировать вашы запыты, каб прадухіліць ін'екцыі ці памылку.

5
дададзена
@edwardtyl Google "падрыхтаваныя заявы." Замест таго, каб 30 слупкоў, што вы павінны зрабіць, гэта разбіць на гэта ў іншую табліцу, якая аб'ядноўвае ў гэтай табліцы і стварыць 30 радкоў
дададзена аўтар Explosion Pills, крыніца
@edwardtyl Я думаю, што гэта будзе, але гэта залежыць ад таго, як дадзеныя будуць выкарыстоўвацца. Захаванне яго ў масіве робіць яго вельмі цяжка выкарыстоўваць і маніпуляваць імі з самай MySQL; Вы практычна павінны выкарыстоўваць PHP, калі вы хочаце, каб рабіць якія-небудзь працы на значэння гэтага масіва
дададзена аўтар Explosion Pills, крыніца
Або выкарыстоўваць JSON: D ~
дададзена аўтар Wesley Schleumer de Góes, крыніца
Як прадухіліць ін'екцыі і памылкі?
дададзена аўтар edwardtyl, крыніца
Акрамя таго, я хачу выкарыстоўваць масіў, таму што масіў можа змяшчаць да 30 значэнняў, і я не хачу мець 30 слупкоў у маёй табліцы.
дададзена аўтар edwardtyl, крыніца
@ExplosionPills Ці будзе гэта лепшы варыянт, чым проста серыялізацыі? Паколькі серыялізацыя здаецца нашмат прасцей.
дададзена аўтар edwardtyl, крыніца
@ExplosionPills Ну я буду выкарыстоўваць Serialize ў гэтым выпадку, так як я толькі планую выкарыстоўваць PHP, і гэта для праграмы чата, у якім масіў змяшчае ідэнтыфікатары кожнага чалавека, які можа ўбачыць пост (які знаходзіцца ў асобнай калонцы ў тая ж радок). Дзякуй!
дададзена аўтар edwardtyl, крыніца

У мяне ёсць пытанне, чаму вы хацелі б гэта зрабіць, але самы просты адказ сериализовать масіў.

"INSERT INTO table (arraytest) VALUES ('" . serialize($shared) . "')"

Затым вы можаце выкарыстоўваць десериализации пры выманні яго з базы дадзеных


Вы павінны правільна параметризировать вашы запыты, каб прадухіліць ін'екцыі ці памылку.

5
дададзена
@edwardtyl Google "падрыхтаваныя заявы." Замест таго, каб 30 слупкоў, што вы павінны зрабіць, гэта разбіць на гэта ў іншую табліцу, якая аб'ядноўвае ў гэтай табліцы і стварыць 30 радкоў
дададзена аўтар Explosion Pills, крыніца
@edwardtyl Я думаю, што гэта будзе, але гэта залежыць ад таго, як дадзеныя будуць выкарыстоўвацца. Захаванне яго ў масіве робіць яго вельмі цяжка выкарыстоўваць і маніпуляваць імі з самай MySQL; Вы практычна павінны выкарыстоўваць PHP, калі вы хочаце, каб рабіць якія-небудзь працы на значэння гэтага масіва
дададзена аўтар Explosion Pills, крыніца
Або выкарыстоўваць JSON: D ~
дададзена аўтар Wesley Schleumer de Góes, крыніца
Як прадухіліць ін'екцыі і памылкі?
дададзена аўтар edwardtyl, крыніца
Акрамя таго, я хачу выкарыстоўваць масіў, таму што масіў можа змяшчаць да 30 значэнняў, і я не хачу мець 30 слупкоў у маёй табліцы.
дададзена аўтар edwardtyl, крыніца
@ExplosionPills Ці будзе гэта лепшы варыянт, чым проста серыялізацыі? Паколькі серыялізацыя здаецца нашмат прасцей.
дададзена аўтар edwardtyl, крыніца
@ExplosionPills Ну я буду выкарыстоўваць Serialize ў гэтым выпадку, так як я толькі планую выкарыстоўваць PHP, і гэта для праграмы чата, у якім масіў змяшчае ідэнтыфікатары кожнага чалавека, які можа ўбачыць пост (які знаходзіцца ў асобнай калонцы ў тая ж радок). Дзякуй!
дададзена аўтар edwardtyl, крыніца

Або выкарыстоўвайце json_encode (), каб зрабіць радок JSON з вашага масіва (і json_decode (), каб пераўтварыць яго назад). Гэта дасць вам больш платформа-незалежны, ён жа ў будучыні доказ прадстаўлення дадзеных. Акрамя таго, гэта прывядзе да крыху менш сімвалаў, якія захоўваюцца ў БД.

Я сустрэў пару выпадкаў, калі дадзеныя быў прадстаўлены спосабам, як правіла, «дадатковая» інфармацыяй для запісаў, было цяжка націскаць у схему будзе яно змянялася запіс за запісам. Гэта прагматычнае рашэнне, хоць і не вельмі добры. У прыватнасці, вы будзеце мець цяжкі час запытваючы інфармацыю, якая захоўваецца ў гэтым масіве, не чытаючы ўсю табліцу ў памяць.

1
дададзена

Вы не можаце ўстаўляць PHP масівы ў БД. Ваша задача заключаецца ў наступным:

$arr = new Array(1,2,3);
echo $arr;//prints "Array"

Пры выкарыстанні масіваў у кантэксце радкі ў PHP, вы проста атрымаеце слова «Array», а не змесціва масіва. Вы павінны запусціць пятлю на масіў для ўстаўкі кожнага асобнага значэння, напрыклад,

foreach($arr as $val) {
   INSERT INTO yourtable VALUES ($val)
}
0
дададзена

Вы не можаце ўстаўляць PHP масівы ў БД. Ваша задача заключаецца ў наступным:

$arr = new Array(1,2,3);
echo $arr;//prints "Array"

Пры выкарыстанні масіваў у кантэксце радкі ў PHP, вы проста атрымаеце слова «Array», а не змесціва масіва. Вы павінны запусціць пятлю на масіў для ўстаўкі кожнага асобнага значэння, напрыклад,

foreach($arr as $val) {
   INSERT INTO yourtable VALUES ($val)
}
0
дададзена

Пры захоўванні масіва, як гэта не рэкамендуецца, лепшы спосаб складаецца ў выкарыстанні серыялізацыі і десериализации (для атрымання дадзеных зваротна з базы дадзеных). Тым не менш, я думаю, вы павінны проста змясціць кожнае значэнне з'яўляецца асобнай ячэйкай з дапамогай цыкла Еогеаспа ...

0
дададзена

Пры захоўванні масіва, як гэта не рэкамендуецца, лепшы спосаб складаецца ў выкарыстанні серыялізацыі і десериализации (для атрымання дадзеных зваротна з базы дадзеных). Тым не менш, я думаю, вы павінны проста змясціць кожнае значэнне з'яўляецца асобнай ячэйкай з дапамогай цыкла Еогеаспа ...

0
дададзена