[PHP] Insert BLOB

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Ik heb een tabel in de database met daarin velden van het type blob.
Ik wil daar een .png plaatje in opslaan.
Daarvoor heb ik het volgende script :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="POST">
Filename : <INPUT TYPE="text" NAME="filename">
</FORM>

<?php
if (isset($_POST['filename']))
{
    // Read file
    $fname = $_POST['filename'];
    $fh = fopen($fname, 'rb') or die("File not found<br>");
    $image = fread($fh, 8192);
    $image = addslashes($image);
    fclose($fh);
    echo "Read from $fname<br>";

    // Determine ticker and date
    $ticker = "^".substr($fname,4,3);
    $date   = substr($fname,8,8);
    echo "Ticker = $ticker, Date = $date<br>";

    // Connect to MySQL
    include "mysql.php";

    // Insert into database
    $sql = "UPDATE yahoo SET chart=$image
        WHERE ticker=$ticker";
    //echo "Query1 = $sql<br>";
    $result = mysql_query($sql, $con);
    echo "Result = [$result]<br>";
}
?>

De tabel is aangemaakt met een ander script :
code:
1
2
3
4
5
6
7
8
9
10
11
$sql = "CREATE TABLE yahoo
(
    Ticker varchar(8),
    Date   date,
    Open    decimal(8,2),
    High    decimal(8,2),
    Low decimal(8,2),
    Close   decimal(8,2),
    Volume  int,
    Chart   blob
)";

Het resultaat van de update is echter 0.
Wat doe ik hier fout?

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Maak even van de mysql_query dit:
PHP:
1
2
<?php
mysql_query($sql, $con) or die(mysql_error);

Geen mooie oplossing als je naar de uitkomst gaat kijken, maar zo zie je wel wat er fout gaat. En als je zelf niet uit de fout komt, post hem dan hier ;)

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Volgens mij lijken quotes om die binare zooi heen wel handig.

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Geen addslashes gebruiken, maar mysql_real_escape_string. En weet je zeker dat je maar 8kb nodig hebt?

Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
kokx schreef op dinsdag 25 september 2007 @ 18:12:
Maak even van de mysql_query dit:
PHP:
1
2
<?php
mysql_query($sql, $con) or die(mysql_error);

Geen mooie oplossing als je naar de uitkomst gaat kijken, maar zo zie je wel wat er fout gaat. En als je zelf niet uit de fout komt, post hem dan hier ;)
Resultaat is nu :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‰PNG \0\0\0 IHDR\0\0\0À\0\0\0`\0\0\0¹î`Ú\0\0\0*PLTEÿÿÿ\0\0\0fffåå媪ª\"\"ÿÿ' at line 1

Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
_js_ schreef op dinsdag 25 september 2007 @ 18:18:
Geen addslashes gebruiken, maar mysql_real_escape_string. En weet je zeker dat je maar 8kb nodig hebt?
Gezien mijn reactie hierboven maar eens proberen met mysql_escape_string.
De plaatjes zijn ongeveer 1kb, dus 8 is zeker genoeg.

Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
_js_ schreef op dinsdag 25 september 2007 @ 18:18:
Geen addslashes gebruiken, maar mysql_real_escape_string. En weet je zeker dat je maar 8kb nodig hebt?
YEP! met de functie mysql_real_escape_string werkt het.
Ik gebruik dus nu:
code:
1
2
3
$sql = sprintf("UPDATE yahoo SET chart='%s' WHERE ticker='%s'",
mysql_real_escape_string($image),
$ticker);

Nu kijken of ik deze weer als plaatje eruit kan halen...

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
dik_voormekaar schreef op dinsdag 25 september 2007 @ 18:55:
De plaatjes zijn ongeveer 1kb, dus 8 is zeker genoeg.
Controleer dat dan ook, zodat je niet bij grotere plaatjes alleen de 1e 8kB probeert op te opslaan. ;)

{signature}


  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Kan je niet beter het plaatje uploaden en de fysieke lokatie opslaan in een databaseveld?

[webhero.nl]


Verwijderd

koekiemonster schreef op woensdag 26 september 2007 @ 15:48:
Kan je niet beter het plaatje uploaden en de fysieke lokatie opslaan in een databaseveld?
Jep... dit is tot nu toe wel de manier ja... aangezien mysql niet echt gemaakt is voor het opslaan van binaire data... Hier komt met de nieuwe storage engine "Falcon" wel verandering in.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Aub niet weer de db vs fs voor plaatjes discussie beginnen, is al in diverse grote topics helemaal uitgekauwd...

{signature}

Pagina: 1