ugrás a tartalomhoz

Mysql tábla kezelése

peter71 · 2009. Júl. 22. (Sze), 19.53
Sziasztok

Szeretnék készíteni egy olyan függvényt, amely lehetővé teszi számomra, hogy bármilyen táblába tudjak beszúrni. Azt hiszem egy olyan függvény lenne a megoldás, ami paraméterben kapja a tábla nevét, és a beszúrandó adatokat.
Van arra lehetőség, hogy a függvénynek különböző számú paramétereket adjunk meg? Esetleg van valami egyszerűbb megoldás?

Köszönöm:
Peter71
 
1

Olvasgattam, gondolkoztam.

peter71 · 2009. Júl. 22. (Sze), 20.24
Olvasgattam, gondolkoztam. Rájöttem, hogy a függvény paraméterei között tömböt is meglehet adni. Igazából nem biztos, hogy szükség van rá, hiszen a POST-ban ott vannak a beírandó adatok és azt gondolom meg lehet számolni.
Azt azonban nem tudom, hogy ha a POST-ban elküldött adatok nem olyan sorrendben vannak mint a táblában, akkor hogyan rakom sorrendbe őket.
További gondolkodás után, azt sem tudom, hogy a beszúrásnál, hogy adom meg a mező neveket.
2

tipp

QXY · 2009. Júl. 22. (Sze), 22.27
A különböző számú paraméterre valóban jobb megoldás ha tömbként adod át.
Ezután nincs más dolgod, mint a tömb kulcsait megfeleltetni az oszlopneveknek
és így a sorrend is lényegtelen. Csak annyi a dolgod, hogy egy foreach-el
végigszaladsz a tömbön és dinamikusan összerakod a query string-et.

Szerk: a foreach nem is fontos most nézem a saját kódomban sem azzal van... :)
Hacsak nem akarsz egy post process-t alkalmazni (pl. escape-lni) akkor ennyivel is megoldható:

$query = 'INSERT INTO `'.$table.'` (`'.implode( '`,`', array_keys($fields) ).'`) VALUES ('.implode( ',', array_values($fields) ).')';
3

mit akarsz POST-ban küldeni?

zyron · 2009. Júl. 22. (Sze), 22.44
A POST tömböt űrlapok elküldésekor használod, az űrlapon meg olyan sorrendben szerepelnek az adatok, amilyen sorrendben a mezők vannak.
Egyébként az űrlap elemeit tömbként is el tudod küldeni. Ha a tábládban az oszlopok más sorrendben szerepelnek, mint ahogy szeretnéd bekérni az adatokat a formoddal, akkor csinálhatod például így:

<html>
  <head></head>
  <body>
    <form action="index.php" method="POST">
      <input type="text" name="user[1_name]" />
      <input type="text" name="user[0_email]" />
      <input type="password" name="user[2_password]" />
      <input type="submit" />
    </form>
  </body>
</html>

<?php
if(isset($_POST['user']))
{
  $userDataArray = $_POST['user'];
  print_r($userDataArray);
  ksort($userDataArray);
  print_r($userDataArray);
}
?>
És így a mező nevét megelőző szám jelenti a MySQL táblád szerinti sorrendet.
Értsd:
MySQL táblában a sorrend:
- email
- name
- password
Formban a sorrend:
- name
- email
- password

Az oszlopok nevét pedig egy explode-dal ('_' karakter szerint) kinyerheted a mezők nevéből.
4

Köszönöm, a segítséget. Ahogy

peter71 · 2009. Júl. 22. (Sze), 23.56
Köszönöm, a segítséget.
Ahogy látom a megoldások jók lehetnek, de én olyat szerettem volna, amit általánosan minden táblánál fel tudok használni. Ehhez az oszlopok neveit az adatbázisból kellene kiolvasnom.
Valami olyan elképzelésem van, hogy egy függvény ír a felhasználók és a termékek táblába is. Ezt a megoldást a későbbiekben máshol is föl tudnám használni. Így nem adhatok meg oszlop neveket. Keresgéltem, és találtam valamit (information_schema), de ez idáig nem tudtam belőle számomra használhatót kihámozni.
5

RTFM, persze angolul van, és

Poetro · 2009. Júl. 23. (Cs), 00.15
RTFM, persze angolul van, és meg kell tanulni angolul, de másképp ezt egyszerűen nem lehet csinálni.
mysql> DESCRIBE users;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| uid       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name      | varchar(60)      | NO   | UNI |         |                |
| pass      | varchar(32)      | NO   |     |         |                |
| mail      | varchar(64)      | YES  | MUL |         |                |
| mode      | tinyint(4)       | NO   |     | 0       |                |
| sort      | tinyint(4)       | YES  |     | 0       |                |
| threshold | tinyint(4)       | YES  |     | 0       |                |
| theme     | varchar(255)     | NO   |     |         |                |
| signature | varchar(255)     | NO   |     |         |                |
| created   | int(11)          | NO   | MUL | 0       |                |
| access    | int(11)          | NO   | MUL | 0       |                |
| login     | int(11)          | NO   |     | 0       |                |
| status    | tinyint(4)       | NO   |     | 0       |                |
| timezone  | varchar(8)       | YES  |     | NULL    |                |
| language  | varchar(12)      | NO   |     |         |                |
| picture   | varchar(255)     | NO   |     |         |                |
| init      | varchar(64)      | YES  |     |         |                |
| data      | longtext         | YES  |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+
18 rows in set (0.08 sec)
6

RTFM, he ez az amit a google

peter71 · 2009. Júl. 23. (Cs), 01.00
RTFM, he ez az amit a google ír, akkor nem valami kedves.
Ezt olvastam, , de a megadott oldal nem működik. Kerestem a , de itt is kevés eredménnyel.
Ezek után, tényleg RTFM nekem.
7

Ugyan jelen pillanatban épp

Poetro · 2009. Júl. 23. (Cs), 01.14
Ugyan jelen pillanatban épp nem működik a MySQL oldala, de a dokumentációt akkor is le lehet tölteni a Google cachelt oldala alapján.
8

Meg van a megoldás. SELECT

peter71 · 2009. Júl. 23. (Cs), 07.27
Meg van a megoldás. SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
[AND table_schema = 'db_name']

Most már meg tudom szerezni az oszlop neveket, így megpróbálhatom megírni a függvényt. Már csak azt kell kitalálnom, hogy hogyan ellenőrizhetem a bevitel és az oszlopok sorrendjét.

Köszönöm:
Peter71
9

Milyen sorrend?

QXY · 2009. Júl. 23. (Cs), 08.16
Ha felsorolod az oszlopneveket, akkor a sorrend LÉNYEGTELEN!

CREATE TABLE `test`.`sorrend` (
`egy` INT NOT NULL ,
`ketto` INT NOT NULL ,
`harom` INT NOT NULL
) ENGINE = InnoDB;

INSERT INTO `test`.`sorrend` (`egy`, `ketto`, `harom`) VALUES ('1', '2', '3');

INSERT INTO `test`.`sorrend` (`harom`, `egy`, `ketto`) VALUES ('3', '1', '2');


Mindkét esetben ugyanaz a sor kerül bele a táblába.
10

ORM

zyron · 2009. Júl. 23. (Cs), 12.07
Amúgy, ha ennyire általánosítani akarsz, meg sok tábláról van szó, akkor érdemes valami ORM-et (Object-Relational Mapping) megvalósítani, vagy meglévőt felhasználni (pl. Propel, Doctrine). Illetve érdemes elgondolkozni azon, hogy egy olyan PHP keretrendszert használj, ami tartalmaz ilyet. (Nagyobb projekthez pl. symfony egész jó - de ne legyen vallási vita ebből :)

ORM-re rákereshetsz, sok helyen le van írva a lényege. Pl. Propel oldalán is.
11

Nem sok tábláról van szó,

peter71 · 2009. Júl. 23. (Cs), 17.01
Nem sok tábláról van szó, csak néhányról. Viszont ha megírom, akkor más adatbázisokban is fel tudom használni.
A sorrend pedig onnan jön, hogy szeretnék az admin felületet úgy elkészíteni, hogy ha az űrlap más sorrendben van mint a táblába használt oszlopok, akkor is jó helyre illessze be az adatokat.
Tehát, van egy űrlap név és e-mail beviteli mezővel, és ha a táblában fordítva van az oszlopok sorrendje akkor is használható legyen a függvény. Paraméterként megkapja a tábla nevét és az adatokat, a fent említett select-el meg nézem milyen oszlopok vannak és a megkapott beviteli mező értékeket a helyére írja be. Nem örülnék neki, ha a nevet és az e-mail-t megcserélné.

Az ORM-et megnézem.

Köszönöm:
Peter71