Chtěl jsem se zeptat, jak můžu nahrát do databáze do pole ve formátu BLOB soubor. Používám tento dotaz:
update programs set source=load_file('http://xxx.wz.cz/prg/neco.zip') where id=1;
Také jsem zkoušel zadat:
update programs set source=load_file('/3w/wz.cz/x/xxx/prg/neco.zip') where id=1;
Chybu nehlásí a píše, že bylo změněno 0 záznamů. Přitom tento řádek existuje.
Nevíte někdo jak na můj problém vyzrát? Díky předem :o)
Mno, jak je psáno v manuálu, tak soubor musí být na servru. Nemám s touhle funkcí zkušenosti, ale myslím si, že chyba bude zde, neboť jestli se nemýlím, tak MySQL běží na jiným servru než jsou naše stránky a tudíž nemůžeš použít absolutní cestu a přístup přes http to zase nepodporuje.
Pokud to není tímhle, tak zkontroluj, jestli exituje řádek s id=1. Můžeš i provést malou kontrolu a to tak, že do toho "source" ručně (třeba z phpMyAdmina) vložíš něco (třeba jen jedno písmenko) a ten update by ti to měl změnit na NULL, jelikož to vrací ta funkce v případě neexistence souboru.
Pokud budeš chtít ten soubor vložit, tak ho můžeš v PHP načíst a ukládat pak tu proměnnou. Nakonec poznámečka. Je to na tobě a tvém návrhu databáze, ale myslíš, že je opravdu nutné vkládat ten soubor do databáze? Nebylo by lepší ten soubor nechat na disku a do databáze uložit jen cestu k němu?
a) na wz.cz je limitovana velikost db na 2MB. davat do ni programy je podle meho nazoru naprosta hloupost.
b) kdyz uz, tak by slo pouzit load data local infile, coz je vsak z bezpecnostnich duvodu zakazano.
c) jestli fakt chces nahrat do db celej soubor, tak ho nejdriv precti (php: $soubor=file_get_contents('path_to_file');) a pak:
mysql_query('update programs set source="'.mysql_escape_string($soubor).'"');
to be melo chodit bez problemu