Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Stel een vraag

Discussieer mee of stel een vraag

Filters - Verfijn resultaten

Topictype

Categorieën

AND

Onderwerpen

AND

Subforum

Datumbereik

Topicstarter

Topicstatus

614 topics - Pagina 1 van 25

Scheiden van resultaten query php en mysql

22-04 09:22 vraag 13

Vraag

Ik ben bezig met een project voor school, waarbij we een website met php en mysql moeten maken.
Nu moeten we ook werken met query's, wat niet zo'n probleem is, echter lukt mij nu iets niet.

Ik probeer uit een tabel genaamd favorieten meerdere youtuber_id's te halen met de volgende query:SELECT youtuber_id FROM favorieten WHERE id='$id'

In de tabel staan dus een id en een youtuber_id. als een gebruiker(id) meerdere favorieten heeft, staat deze meerdere keren in de tabel met elke keer een andere youtuber_id. Nu heb ik een id met drie verschillende youtuber_id's.

Echter geeft de query als resultaat de 3 youtber_id's achter elkaar weer, wat op zich logisch is. Ik wil ze echter als 3 aparte variabelen krijgen die ik vervolgens kan gebruiken om uit de tabel youtubers gegevens op te halen. Kan iemand mij misschien helpen?

Beste antwoord

Je zal de data in een Array moeten gooien.
http://php.net/manual/en/language.types.array.php

Nu overwrite die steeds de string waardoor je maar 1 waarde hebt.

Edit: je zou ook += kunnen doen in plaats van is, dan voegt die het steeds toe, maar is niet netter.

Tevens, escape je ID even, dit is vragen om SQL Injectie
http://php.net/manual/en/security.database.sql-injection.php
https://www.netsparker.co...ql-injection-cheat-sheet/

En nee, hobby project is geen excuus, aanleren dat je dat altijd doet!

Hoe zouden jullie websites hosten

18-04 22:17 discussie 11
Gewoon even een simpele peiling.

We zitten met een redelijk standaard, zij het wat "ouderwetse" LAMP stack.
  • CentOS 6
  • PHP 5.6 (via CustomBuild, een DirectAdmin plugin)
  • Mysql (5.6)
  • Apache (2.4)
In combinatie met DirectAdmin, beheren we hiermee een heleboel websites, een groot deel redelijk low-traffic. Bij overstappen naar PHP 7 viel toch tegen dat 2 versies naast elkaar draaien veel kopzorgen kost** :X . Dus nu willen we aan de slag met een tweede server. Maar hoe vullen we dat precies in?

Webdev is de wereld van "leef 3 seconden en je bent ouderwets" . Docker, Droplets, backend als pure API, en frontend in Vue.js/Angular/React, Node.js, noem het maar op, spanning en sensatie. Maar we willen eigenlijk gewoon naar een "iets modernere" setup, waar m'n collega's niet 3 bijscholingen voor nodig hebben, en wat voorlopig gewoon nog prima blijft werken.

Is er een reden om níet CentOS 7 te gebruiken? Ik zou er zelf 1 weten: als we een exotisch uitstapje doen voor 1 project, kun je op Ubuntu makkelijk een PPA toevoegen en iets ernaast installeren* .

Apache zal er gewoon nog inblijven, net als Mysql. Trouwens, wat betreft requirements voor oude sites: we zullen onze Laravel 5 applicaties overzetten naar de nieuwe server, maar die zijn redelijk flexibel (willen niet teveel onnodig werk insteken)

We zitten momenteel trouwens dus vast aan mod_ruid2, om alles te scheiden op gebruiker. Dit valt een beetje samen met een discussie die ik laatst had over PHP handlers*** . Die mod_ruid2 is meestal prima, maar misschien zijn er betere methodes ondertussen?

Wat zijn jullie ideeën over de situatie? Hoe zouden jullie dat in onze situatie aanpakken? Kan je de keuzes onderbouwen? Dank d:)b


* denk dat er meer PPA's zijn dan CentOS repo's
** Je kan met CustomBuild verrassend eenvoudig 2 versies binnen Apache actief hebben, als ze maar verschillende handlers hebben (mod_php, php-fpm, SuPHP etc). Toch zijn er wat restricties in hoe dat werkt!
*** SuPHP is de enige handler die tegelijk met mod_ruid2 kan draaien, en die scheid ook per gebruiker. PHP-FPM kan zoiets ook wel via httpd.conf configuratie volgens mij . Oja, weinig informatie over handlers trouwens te vinden, dit zijn 2 oude bronnen:
https://www.litespeedtech...enchmarks/php-hello-world
http://www.firewing1.com/...reforkmodphp-vs-itkmodphp

ps. Ik vergeet vast informatie, beetje geschreven over loop van de avond dit.

MySQL insert meerdere rows in een stored procedure

18-03 19:31 vraag 10

Vraag

Voor een school opdracht zit ik te dubben hoe ik iets het beste aan kan pakken, eerst een situatie schets:
een fotograaf maakt een foto voor een klant(dit kan ook een groepsfoto zijn maar dat is voor deze scope niet relevant) de Database is MySQL en de clients zijn in Java(dit staat vast en mogen we helaas niet veranderen) De fotos worden op de server opgeslagen als file, in de database staat dus een pad naar de foto(het leek me niet de slimste optie om de foto te converten naar bytes en die opslaan..)

nou wil ik een procedure maken die meerdere fotos in een keer kan inserten zodat je niet voor elke foto een connectie aan hoeft te maken. Echter zijn er twee dingen die mij belemmeren: MySQL kent geen arrays en ook geen split functie, kan dus ook geen csv format als parameter meegeven.

Mijn vraag is hoe ik dit het slimste kan aanpakken. Ik zou in java alle fotos kunnen loopen en voor elke foto een simpele insert aanroepen, maar dit wil ik eigenlijk vermijden. Als er informatie mist hoor ik het wel, het lijkt me niet nuttig om mijn tabelstructuur toe te voegen, aangezien ik niet opzoek ben naar een specifieke oplossing, maar meer hoe jullie zoiets aan zouden pakken.

Beste antwoord

Kijk eens naar connection pooling. Dan boeit het echt niet meer dat je meer dat je per insert een connectie aanmaakt, dat doet de pool dan namelijk voor je.

[MySQL 5.5] Simpele query soms traag

16-03 23:17 vraag 9

Vraag

Waarom is query 1 consequent zo traag, terwijl ie eigenlijk het snelst zou moeten zijn, er zijn namelijk geen topics met forumid 1.
Bug in de optimizer of zie ik iets simpels over het hoofd?
SQL:
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
32
33
34
35
36
37
38
39
40
41
42
43
mysql> select id, subject from topics where forumid = 1 order by lastpost desc limit 1;  
Empty set (0.58 sec)

mysql> select id, subject from topics where forumid = 118 order by lastpost desc limit 1;
+---------+---------+
| id      | subject |
+---------+---------+
| 1542189 | test    |
+---------+---------+
1 row in set (0.00 sec)

mysql> explain select id, subject from topics where forumid = 1 order by lastpost desc limit 1;
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table  | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | topics | index | NULL          | lastpost | 4       | NULL |    1 | Using where |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> explain select id, subject from topics where forumid = 118 order by lastpost desc limit 1;  
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table  | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | topics | index | NULL          | lastpost | 4       | NULL |    1 | Using where |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)

 CREATE TABLE `topics` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `forumid` int(10) unsigned NOT NULL DEFAULT '0',
  `userid` int(10) unsigned NOT NULL DEFAULT '0',
  `locked` enum('yes','no') NOT NULL DEFAULT 'no',
  `sticky` enum('yes','no') NOT NULL DEFAULT 'no',
  `subject` varchar(255) NOT NULL,
  `posts` int(11) NOT NULL,
  `lastpost` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `userid` (`userid`),
  KEY `subject` (`subject`),
  KEY `lastpost` (`lastpost`)
) 

MySQL 5.5.47-0+deb8u1

Beste antwoord

Geen antwoord op je vraag, maar waarom zet je geen index op forumid? Nu moet ie alle forumid's af om te ontdekken dat er geen forumid 1 is.

Totaal van records aangeven met php/mysqli lukt niet

27-01 09:09 vraag 11

Vraag

Ik ben voor mijzelf een projectje begonnen. Het komt er kort op neer dat ik bezig ben met een formulier waar personen gegevens kunnen invullen over een hoeveelheid troepen, van tribalwars, en deze hoeveelheid wordt dan inclusief gebruikersnaam opgeslagen in een database. Het probleem is echter dat ik het totaal aantal troepen van alle gebruikers bij elkaar opgeteld wil zijn en dat gegeven dan outputten in een html tabel. Het is me nu wel gelukt om een totaal van troepen per gebruiker weer te geven, maar het lukt me niet om dat van alle gebruikers in totaal te doen.

Dit is de code die ik nu gebruik:
PHP: test.php
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
32
33
34
35
36
37
38
$mysqli = new mysqli($servername, $username, $password, $db);
 
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}
 
$query = "SELECT * FROM Troepen";
 
if ($result = $mysqli->query($query)) {
 echo "<table border=1 width=70% bgcolor=white>";
 echo "<tr>";
 echo "<th> Speler</th>";
 echo "<th> Aanvallend</th>";
 echo "<th> Verdedigend</th>";
 echo "<th> Totaal</th>";
 echo "</tr>";
 
 while ($row = $result->fetch_assoc()) {
  $username = $row["username"];
  $aanvallend = $row["bijlvechter"] + $row["cavalerist"] + $row["boogschutter_te_paard"] + $row["ram"] + $row["katapult"];
  $verdedigend = $row["speervechter"] + $row["zwaardvechter"] + $row["boogschutter"] + $row["gepantserde_cavalerist"];
  $totaal = $aanvallend + $verdedigend;
 
  echo "<tr>";
  echo "<td> $username</td>";
  echo "<td> $aanvallend </td>";
  echo "<td> $verdedigend </td>";
  echo "<td> $totaal </td>";
  echo "</tr>";
  ob_flush();
  flush();
    }  
 echo "</table>";
    $result->free();
}
 
$mysqli->close();

[Laravel] Onverwacht reultaat van sortBy()

21-01 19:30 vraag 7

Vraag

Als oefening voor mezelf probeer ik een adres boek te maken met Laravel. Als ik mijn adres lijst wil sorteren krijg ik niet het resultaat dat ik verwacht. ik heb de volgende code in mijn controller:
PHP:
1
2
3
4
5
public function test(){
        $adres = Adres::all()->sortBy( 'surname' );
        return View::make('adres.test')
                    ->with('adres', $adres);
    }

en in mijn view dit:
PHP:
1
2
3
4
5
6
7
@section('content')
 <div class="col-md-10 table-responsive">   
    @foreach ($adres as $test)
        {{ $test->surname }}<br>
    @endforeach
 </div> 
@stop

Als resultaat krijg ik een achternamen lijst met eerst alle namen met 1 woord, dan alle namen met 2 woorden, daarna alle namen met 3 woorden. dus zoiets als:
  • Akkermans
  • ...
  • Wagenaar
  • de Bekker
  • ...
  • van Zeeland
  • van den Heuvel
  • ...
  • van der Zee
Mijn verwachting is dat een spatie tussen de letters niet uit maakt voor de manier van sorteren. Als ik met phpMyadmin naar de dataset kijk en sorteer dan krijg ik wel de achternamen gesorteerd zoals ik zou verwachten. Ik heb geprobeerd dit te googelen maar vind niks. (Kan er ook aan liggen dat ik geen goede steek woorden kan verzinnen)
Waarom wordt er op deze manier gesorteerd en voor kom ik het?

Beste antwoord

Je kan ook een flag meegeven om case insensitive te sorteren:
PHP:
1
Adres::all()->sortBy('surname', SORT_STRING | SORT_FLAG_CASE)

Zie http://php.net/manual/en/function.sort.php

Maar in dit geval kan je ook via MySQL sorteren, dat is waarschijnlijk efficienter ook.

[python] Package install

18-01 15:26 vraag 4

Vraag

Beste Tweakers,

Ik heb een python script gemaakt dat werkt op os x.
Nu wil ik deze gebruiken op windows 10 nu moet ik nog enkele package installeren.
Het probleem is wanneer ik het commando pip install ********.
Ook wanneer ik een andere package installeer kom ik altijd op dezelfde fout code terecht.
code:
1
error: command 'C:\\Users\\NAS\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\cl.exe' failed with exit status 2

Visual C++ heb ik al geïnstalleerd en het bestand bestaat maar kom altijd op dezelfde fout terecht.
Heb al wat info opgezocht op internet maar kom er niet veel verder mee.

Databasekeuze-discussie

15-12-2015 discussie 52
Ik ben met een vriend bezig met een project(je) wat als het goed gaat, flink uit de hand kan lopen(positief gezien). Echter is er een kleine discussie ontstaan betreft database keuze :-)


70,000 regels per user per jaar
elke regel is +/- 15Kb

verwacht word een max van 300,000 users in +/- 5 jaar, voor al deze users is er ook historische data beschikbaar. Dus stel user x is in jaar 1 al actief is dat na 5 jaar dus 70,000 * 5 = 350000 regels voor 1 user met 5 jaar aan historische data.

vanuit deze data worden grafieken gegenereerd die weer als rapport gestuurd worden naar de user.

Nu wil ik het genereren van deze data door PHP laten doen voor al deze users. Dit kan op een aparte server waardoor deze server zich alleen maar bezig hoeft te houden met het genereren van de rapporten. Nu heb ik alleen een discussie met diegene waarmee ik dit wil gaan realiseren.

Hij zegt dit kan je vergeten met MySQL en PHP dat gaat nooit goed en snel werken. Waarop mijn reactie was, er zal vast een combinatie zijn php met ?? waarbij dit normaal mogelijk is.

Wat is jullie gedachten hierover ? Het staat al wel vast dat het een taal of database moet zijn die op een (l)unix server moet kunnen draaien.

[ASP.NET] Virtual objecten + Mysql en identity

03-12-2015 discussie 11
Ik ga binnenkort starten met een nieuw project en heb wel een aantal vraagjes.

Het gaat om een ASP.NET MVC5 Web applicatie. Ik heb hier al wel ervaring mee icm EF6. Nou heb ik in het verleden gebruik gemaakt van Virtual objecten om relaties aan te geven in mijn code (code first migrations). Maar toen gebruikte ik een lokale MSSQL database.. (localdb)\v11.0.. Kan iemand mij vertellen of dit ook mogelijk is met EF6 en een MySQL database? Dit omdat MSSQL niet beschikbaar is op Linux en ik al wel een Linux server heb en aan het afwachten ben op de port van .NET naar Linux (of dit verstandig is, laat ik in het midden, feedback geven mag).

Verder ben ik nog op zoek naar een goede identity/membership provider. Ik heb onlangs gewerkt met MySQL MembershipProvider. Deze werd dan aangemaakt door Visual Studio in een MySQL MVC3 Project, maar ik heb thuis problemen met het aanmaken van dit project dus deze valt af mits handmatig aangemaakt. Ik heb al een optie bekeken, namelijk ASP.NET.Identity. Heeft iemand hier ervaring mee? Zo ja, hoe was die? En hoe staat het met security? Ik ben altijd beetje huiverig voor standaard providers.

Ik wil ook externe logins toelaten op de website, zoals bijvoorbeeld Steam, is dat beetje compatibel met eerder genoemde provider?

Misschien beetje veel vragen voor in 1 topic, maar ik sta open om ze verhelderen.

[SQL] Problemen met snelheid van ophalen

16-10-2015 discussie 5
Hoe zou ik de volgende SQL code korter of effcienter maken? Het werkt snel met een kleine dataset alleen als er veel data (meer dan 1000 in order & 1200 in invoice & 4000 in order_status) in staat is het heel langszaam.

Gaat om het volgende stukje SQL:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT o.O_order_ID
         FROM (
            SELECT o.*, max(os.OS_datetime) latestDate
            FROM `order` o
            INNER JOIN `order_status` os ON o.O_order_ID = os.O_order_ID
            GROUP BY o.O_order_ID
            ) o
         INNER JOIN `order_status` os ON os.O_order_ID = o.O_order_ID
         LEFT JOIN invoice i ON o.O_order_ID = i.O_order_ID AND i.I_type = 'invoice'
         LEFT JOIN invoice c ON o.O_order_ID = c.O_order_ID AND c.I_type = 'credit'
         WHERE o.O_order_ID <> '' AND os.OS_datetime = o.latestDate
         AND o.O_payment_status = '1'
GROUP BY o.O_order_ID

Nadeel is dat ik die invoice niet kan en mag ombouwen tot een waardig tabel met invoices en credits. En de subquery betreft order_status moet de laatst mogelijke status van de bestelling ophalen.

[MySQL] SELECT query met JOIN en GROUP BY traag

15-10-2015 discussie 19
Ik loop tegen het probleem aan dat een query in MySQL waarbij een JOIN en vervolgens een GROUP BY wordt gedaan erg traag is. De losse JOIN zonder GROUP BY en de GROUP BY zonder JOIN gaan razendsnel. De SELECT query zoals hij hieronder staat doet er iets meer dan 2 seconden over. Zonder de JOIN of zonder de GROUP BY minder dan 0,004 seconden. Waarom is de combinatie dan zo traag? Is het nog mogelijk dit substantieel te versnellen?
SQL:
1
2
3
4
5
SELECT t_bpk.p
FROM t_bpk
JOIN t_bp ON t_bpk.bp = t_bp.id
GROUP BY t_bpk.p
ORDER BY NULL;


SQL:
1
2
3
4
5
6
7
CREATE TABLE t_bp (id INT PRIMARY KEY);
INSERT INTO t_bp (SELECT n FROM generator_1m WHERE n < 150000);

CREATE TABLE t_bpk (p INT, bp INT);
CREATE INDEX p ON t_bpk (p);
CREATE INDEX bp ON t_bpk (bp);
INSERT INTO t_bpk (SELECT n,n FROM generator_1m WHERE n < 150000);

Beide tabellen heb ik gevuld met dummy data met behulp van deze generator: http://use-the-index-luke...07-30/mysql-row-generator

Omgaan met veel data

03-09-2015 discussie 49
Beste mede-Tweakers,

Omdat wij sinds een paar weken zonnepanelen hebben leek het mij leuk om de data in te lezen, dit kan bijvoorbeeld mooi met enelogics.
Toch heb ik daar echter mijn twijfels over omdat iemand anders toch precies kan zien hoeveel ik verbruik etc.

Daarom kwam ik op het idee om zelf iets kleins te ontwikkelen.

Het idee wordt dat ik via een cronjob elke 1-15 minuten de data ophaal via een raspberry pi vanuit mijn slimme meter, om het zo op te slaan in een MySQL database.

Het probleem waar ik een beetje mee zit is dat als je elke 15 minuten data opslaat in een database deze erg snel vol zou raken.

Weten jullie misschien een mooie oplossing voor dit probleem? En weten jullie misschien hoe bedrijven zoals enelogics dit doen?

Bijvoorbeeld:
1 dag = 1440 minuten / 15 minuten = 96 x per dag moet er data worden opgeslagen.

[MySQL] Query met boolean uitzondering

28-08-2015 discussie 23
Ha devvers, daar ben ik weer :P

Ik heb de volgende databasestructuur, klikbaar:

http://static.tweakers.net/ext/f/TBqPDhvGMVd8KsXGy6N4Ln7c/medium.png

Het boolean veld exception kan twee waardes bevatten, namelijk 0 en 1 (of groter). Als een record in de tabel agent_contract bij exception de waarde 0 heeft, houdt dat in dat desbetreffende agent het desbetreffende contract niet heeft. Heeft exception de waarde 1, dan houdt dat in dat desbetreffende agent het desbetreffende contract wel heeft. In beide gevallen geldt dit ongeacht of de agent het contract al wel of niet via een team waar 'ie lid van is heeft.

Nu wil ik graag een lijst hebben van de contracten die een agent heeft, dus contracten via team(s) plus en min de exceptions. Nu is me dit wel gelukt met onderstaande query, maar ik heb zo m'n twijfels omdat de volgorde van het afhandelen van de exceptions die er afgaan en erbij worden opgeteld uitmaakt.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT contract_id 
FROM contract_team 
INNER JOIN agent_team 
ON contract_team.team_id=agent_team.team_id 
WHERE agent_id='Agent1' 
AND contract_id NOT IN (
    SELECT contract_id 
    FROM agent_contract 
    WHERE agent_id='Agent1' AND exception=0
) 
UNION 
SELECT contract_id 
FROM agent_contract 
WHERE agent_id='Agent1' AND exception=1

Kan iemand me helpen met het verbeteren van de query en/of uitleggen welke exception ik voorrang moet geven?

[Laravel] MySQL LONGBLOB maximaal 1MB te downloaden

12-08-2015 discussie 17
Beste PRGers.

Sinds een aantal weken ben ik aan het stoeien met Laravel (5.1). Ik ben voor een interne website een project aan het maken waarin collega's data kunnen opslaan (MySQL LONGBLOBS van ongeveer 16MB) en onze build server kan daarna deze data weer gebruiken bij het vullen van de deliverables.

De tabel is als volgt:
Table: blobstore
Columns:
id		int(10) UN AI PK
version_id	int(10) UN
size		int(10) UN
description	text
created_at	timestamp
updated_at	timestamp
raw_data	longblob


Ik kwam er bij het generen van het schema achter dat Laravel / Eloquent van zichzelf geen LONGBLOBs ondersteunt. Daarom moest ik de volgende regel toevoegen bij het aanmaken van de tabel:
[php]DB::statement("ALTER TABLE `blobstore` ADD `raw_data` LONGBLOB");[/php

Nu loop ik echter tegen een probleem aan. Wanneer ik de file download, kreeg ik maar 1MB (de eerste megabyte) van de LONGBLOB binnen.
Ik verdacht eerst de database, maar daarin staat de data wel volledig.
http://tweakers.net/ext/f/p5TmfPP0D2AHRNintmIoi8cA/thumb.png

Een korte zoektocht leidde me naar: http://stackoverflow.com/...ownload-easily-in-laravel

Omdat ik geen files had, echo-de ik de content van de raw_data direct naar de outputbuffer:
PHP:
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
/* Versimpeld */
$blob = Blobstore::find($bid);
$headers = array(
            'Content-Description'       => 'File Transfer',
            'Content-Type'              => 'application/octet-stream',
            'Content-Transfer-Encoding' => 'binary',
            'Expires'                   => 0,
            'Cache-Control'             => 'must-revalidate, post-check=0, pre-check=0',
            'Pragma'                    => 'public',
            'Content-Length'            => $blob->size,
        );
$filename = 'foobar.bin';
$response = new Response('', 200, $headers);
$response->header('Content-Disposition', 'attachment; filename=' . $filename);
// If there's a session we should save it now
if (Config::get('session.driver') !== '')
{
    Session::save();
}

session_write_close();
ob_end_clean();
$response->sendHeaders();

echo $blob->raw_data;

// Finish off, like Laravel would
Event::fire('laravel.done', array($response));
$response->foundation->finish();

exit;

Middels bovenstaande code kreeg ik ook maar files van 1MB binnen.

Mogelijk was de echo $blob->raw_data; het probleem, dus verving ik de code door een tempfile:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$temp_file = tempnam(sys_get_temp_dir(), $filename);

$fp = fopen($temp_file, "w+");
flock($fp, LOCK_EX);
$writen = fwrite($fp, $blob->raw_data);
flock($fp, LOCK_UN);
fclose($fp);

if ($fp = fread($temp_file, 'rb'))
{
    while(!feof($fp) and (connection_status()==0))
    {
    print(fread($fp, 8192));
    flush();
    }
}

unlink($temp_file);

Wat schepte mijn verbazing; $writen stond op 1048576. Precies 1MB. Op dat moment begon ik Eloquent te verdenken, dus ik schreef zelf een query:
PHP:
1
2
3
4
$raw_datas = DB::select('select `raw_data` from blobstore where id = ?', [$bid]);
$raw_data = $raw_datas[0];
/* ... */
$writen = fwrite($fp, $raw_data->raw_data);

Echter hetzelfde resultaat.

Nu zit ik dus klem, wie kan mij in de juiste richting duwen?

Alvast bedankt _O_

Matis

[PHP/MySQL] Begin/einddatum weeknummer op basis van datum

28-07-2015 discussie 17
Ik ben nu al een tijdje aan het denken hoe ik aan de juiste start- en einddatum van een week kom. Er zijn hiervoor allerlei functies en die werken allemaal prima totdat je rond de jaarwisseling komt.

Zo is 1-1-2015 namelijk volgens het ISO 8601 formaat nog week 52 van 2014, en daar gaan alle functies dan weer mis die ik kan vinden.

Het weeknummer van de week bepaal ik in de SQL query op de volgende manier (Waarin WeekDatum een "DATE" field is met bijvoorbeeld de waarde 2015-01-01)
code:
1
2
3
SELECT *, WEEK(WeekDatum, 3) as WeekNummer
FROM marketingtaken 
ORDER BY WeekDatum DESC

[PHP][MySQL] Load data query escaping

05-06-2015 discussie 3
Hallo,

Ik heb op dit moment een pagina waar je bestanden kunt uploaden, de bedoeling is dat er een csv bestand wordt geüpload en dat hij rechtstreeks de database in gaat. Alleen de escaping krijg ik maar niet voor elkaar.
code:
1
2
3
4
5
"LOAD DATA LOCAL INFILE  '".$path."' REPLACE INTO TABLE  `tmptable`
FIELDS TERMINATED BY  ';'
ENCLOSED BY  ''
ESCAPED BY  '\\'
LINES TERMINATED BY  '\r\n'";

Ik krijg deze melding vanuit MySQL als ik de query wil uitvoeren:
code:
1
"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 ''' at line 5"

Zou iemand me de goede richting in willen wijzen?

Alvast bedankt!

[MySQL] Escape backslash werkt niet

27-05-2015 discussie 24
Ik heb de volgende MySQL Tabel
id (primary key)pad (varchar utf8_general_ci)
1TEKST TEKST \ TEKST


Nu probeer ik op basis van het Pad de bijbehorende primary key te vinden, maar dit wil niet lukken. Van de volgende 3 query's werken de eerste 2 wel, maar de laatste niet. De Collatie wijzigen van utf8_general_si naar latin1_swedish_ci werkt ook niet. Het Database type is Inno_DB.
MySQL:
1
2
3
4
SELECT *  FROM `table` WHERE `pad` LIKE '% \\\\ %' #werkt
SELECT *  FROM `table` WHERE `pad` LIKE '%TEKST \\\\ %' #werkt
SELECT *  FROM `table` WHERE `pad` LIKE '%T TEKST \\\\ %' #werkt niet
SELECT *  FROM `table` WHERE `pad` LIKE '%T TEKST%' #werkt niet

Ik begrijp niet helemaal waarom ik de backslash moet Escapen met \\\\ ipv \\ en waarom de query mislukt wanneer er een 2e spatie in zit.

Heeft iemand een idee waarom dit mis gaat?

Via PHP en via phpMyAdmin geprobeerd
PHP Version 5.3.29
phpMyAdmin 4.1.9


EDIT:
Het lijkt er op dat juist de spatie mij de spreekwoordelijke das om doet. '%TEKST TEKST%' werkt ook niet.

[mysql] probleem met join over meerdere tabellen

13-05-2015 discussie 6
Hey,

ik heb een db met wat tabellen en wil daar een query op uitvoeren. Eerst een schets:
Tabel1: product
Tabel2: box
Tabel3: location
Tabel4: prod/box
Tabel5: box/location

tabel 4 en 5 zijn dus tabellen die connecties bevatten, gewoon telkens de twee primary keys van de andere tabellen.

Nu zoeken we een product op en daar zouden we graag alle dozen van hebben en hun locaties op basis van de barcode van het product. Aangezien de barcode van het product ook de key is kan ik die tabel uitsluiten denk ik.
Het lukt me alle dozen van een bepaald product te zoeken met deze querry:
SQL:
1
select b.naam as box from box b inner join `prod/box` p on b.id = p.box WHERE p.product LIKE "00000024"

maar om dan door te gaan om in diezelfde query alle locaties ook op te zoeken dat lukt me niet, ik neem aan dat dit met een soort van subquery moet gebeuren maar dit lukt me niet, enige hulp in de juiste richting zou zeer welkom zijn.
Ik zou het theoretisch gezien kunnen doen door gewoon de resultaten van de query uit te lezen en een nieuwe query op te bouwen en lijn per lijn de locatie na te kijken maar dat zou ik liever niet doen om stappen te besparen.

[SQL] Voorwaarde in query

11-05-2015 discussie 6

code:
1
'SELECT T1.begin, T1.eind, T2.tekst, T3.naam FROM gebouw AS T1, commentaar AS T2, heilige AS T3 WHERE T1.heilige = T3.idheilige AND T1.referenties_id = T2.referenties_id AND T1.heilige = :consecid AND T1.gebouw = :gebouwid'

(De variabelen consecid en gebouwid komen via een Ajax call aan en zijn integers)

Het probleem: soms is er geen veld in de tabel commentaar (T2) wat gekoppeld is aan het referenties_id in T1. Er is dan vaak wel weer een referenties_id in T1, maar de voorwaarde "AND T1.referenties_id = T2.referenties_id" geeft dus geen resultaat (oftewel NULL), wat betekend dat de hele query NULL teruggeeft. Hierdoor komt andere data (die dan wel getoond moet worden) ook niet te voorschijn. Dat moet, ook bij het ontbreken van commentaar, wel gebeuren.
Inconsistente database van een klant, niet ideaal :P

Ik heb in SQL (betreft een MySQL database) al zitten vogelen met de IFNULL() maar krijg daar geen werkende oplossing voor elkaar. De COALESCE() functie krijg ik niet helemaal doorgrond maar lijkt in dit geval ook niet de ideale oplossing.

Iemand tips?

Replicatie Linux web server (database en www folder)

11-05-2015 discussie 6
Beste medetweakers,

Ik ben van plan om een Linux server te repliceren, op dit moment draait er een Ubuntu 15.04 virtuele machine in Hyper-V met een MariaDB database, Apache 2.4 en PHP 5.6 in FPM/fastcgi.

De bedoeling is dat ik een kopie van de virtuele machine maak en deze op een tweede server laat draaien.
Het is dan de bedoeling dat de database gerepliceerd wordt tussen beide virtuele machines en dat de /var/www directory gerepliceerd wordt tussen beide virtuele machines.

De servers zullen een relatief grootte latency hebben (80-120 ms) aangezien een van de servers in Europa zal staan en de andere in Noord Amerika.
Via Amazon Route 53 zal het verkeer gerouteerd worden naar de dichts bijzijnde locatie (indien die niet down is)

De verbinding tussen de servers loopt via internet, en ik wil dit dan ook graag beveiligd hebben om email adressen en NAW gegevens en dergelijke in de database te beschermen.
Ik heb de volgende opties overwogen:
  • openvpn
  • SSH tunnel
  • SSL (TLS)
  1. Mijn vraag is welke optie het veiligst, betrouwbaarst en snelst is (hervatten van verbinding, doorvoer snelheid en latency) voor bovenstaande toepassing, gemak in onderhoud is overigens ook prettig ;)
Ik kan een SSH tunnel opzetten voor het repliceren van de database server en door middel van een applicatie of script kan de /var/www folder gerepliceerd worden.

Een andere mogelijkheid is om de database replicatie via SSL te beveiligen en de SSH tunnel alleen te gebruiken voor de replicatie van de bestanden en folders in /var/www
Het nadeel hiervan is dat er certificaten aanmoeten worden gemaakt die kunnen verlopen en die geld kosten. Niet het geval als ik gebruik maak van: https://letsencrypt.org/

De laatste mogelijkheid is om een VPN op te zetten, bijvoorbeeld door middel van openvpn.
Maar ook hierbij moeten certificaten worden aangemaakt. Daarnaast heb ik geen ervaring met het gebruik van openvpn als "extra" netwerk zonder dat al het verkeer hier over wordt verstuurd.


2. Wat kan ik het beste gebruiken om de bestanden tussen beide virtuele machines gelijk te houden?


3. Eventueel wil ik later nog extra virtuele machines toe kunnen voegen, indien mogelijk ook Windows Servers.

[MYSQL] Waarde in tabellen staat in HEX

09-05-2015 discussie 2
Ik heb volgens mij ergens iets verkeerd gedaan maar nu zit ik dus met het probleem dat ik zelf de tabel waarden niet meer kan lezen zonder een hex omzetter te gebruiken.

Ik heb jusit geprobeerd om de lokale db die ik gebruik om te devven die over te zetten naar de live test site en hetzelfde resultaat, het blijft in hex.

Dus mijn vraag, welke instelling staat er verkeerd want echt ik weet het niet en google geeft me niet echt wat ik zoek :?

Dit via phpmyadmin, voorbeeld:
http://i63.photobucket.com/albums/h148/fragme_dmc/tmp/mysql_phpmyadmin_hex_values.png

MySQL/PHP: Regel in tabel updaten

05-05-2015 discussie 28
Ik ben mij sinds kort aan het verdiepen in de wereld van MySQL. Nou loop ik al tegen genoeg uitdagingen en hindernissen aan, maar ik kom er nu één tegen waar ik geen raad mee weet en niet vooruitkom met meer dan een weekend aan Google, (vooral) Stackoverflow of verschillende basic tutorials zoals deze.

Als proefomgeving ben ik mijn kilometerregistratie aan het omzetten vanaf een spreadsheet naar een database. Dit is gewoon privé-administratie, en het doel is dus vooral ter lering ende vermaak.
Ik heb de gevraagde waarden uit een database in een tabel zichtbaar middels een eenvoudige query. Eén van de functies welke ik wil toevoegen is het 'verwijderen' (mind the quotes) van een regel middels een button welke in iedere regel terugkomt. Dat gaat redelijk goed, maar het vreemde is dat wanneer ik klik/submit...
PHP:
1
2
3
4
if(isset($_POST['submit'])){
    $conn->query("UPDATE auto_kmreg SET actief='0' WHERE kilometers='183145'");
    $conn->close();
}

...er redelijk voor zorgt dat de regel met die waarde wordt verwijderd (lees: onzichtbaar is), maar dat...
PHP:
1
2
3
4
if(isset($_POST['submit'])){
    $conn->query("UPDATE auto_kmreg SET actief='0' WHERE kilometers='$kilometers'");
    $conn->close();
}

...helemaal niets lijkt te doen. Ik zeg daarbij "redelijk" aangezien ik de pagina nog handmatig moet refreshen voor het resultaat, maar dat is een zorg voor later. Ik begrijp echter niet helemaal wat ik nu kan doen om te zorgen dat de betreffende regel wordt verwijderd aan de hand van die variabele $kilometers.

Dit stukje is nu opgenomen boven de head van het document en getuige het feit dat het met een vaste waarde functioneert bij een submit van de button lijkt die plaatsing niet een oorzaak te zijn. In datzelfde document wordt de variabele op andere plekken wel herkend en kan er mee gewerkt/gerekend worden.

Kan iemand me een duwtje in de goede richting geven?

Overigens: ik realiseerde me later dat natuurlijk een tweede auto op exact dezelfde kilometerstand zou kunnen staan bij een tankbeurt, dus ik schakel over op de ID's in plaats van kilometers. Voor nu maakt dat echter geen oplossing voor het probleem.

[SQL] Optimaliseren van query (subquery en IN() )

27-03-2015 discussie 6
Beste allen,

Voor een website, heb ik onderstaande query om een totaal te krijgen van de kolomwaarde 'area', gebaseerd op een specifieke code.

Voorbeeld inhoud tabel 'bc_parameter_difference':

sequence_idobject_idcodeparameter_nameparameter_value
123200area10
223200area5
323201area15
125200area10
225201area5
325200area15


Een scenario om e.e.a. te verduidelijken:

Stel ik wil per 'object_id' een totaal van 'area' voor de code '201':
Er zal dan gezocht moeten worden naar alle objecten waarvan de laatst ingevoerde code (hoogste sequence_id) '201' is. In de voorbeeldtabel hierboven zal dus alleen object_id = 23 geselecteerd moeten worden (immers is 200 de laatste code van object_id 25.
Vervolgens wil ik van object_id = 23 het totaal van de waarde 'Area' hebben.

Na veel proberen, heb ik dit bereikt met de volgende query.
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
SELECT
        d0.object_id,
        SUM(d0.parameter_value) AS values_sum,
    FROM
        bc_parameter_difference d0
    WHERE
        d0.object_id IN 
        (
        SELECT 
            d1.object_id
        FROM 
            bc_parameter_difference d1
        WHERE (
        SELECT COUNT(*) FROM bc_parameter_difference d2
        WHERE d2.object_id = d1.object_id AND d1.sequence_id <= d2.sequence_id
        ) <= 1 
        AND 
            d1.project_id = 1
        AND
            d1.code = 201

        ORDER BY
            d1.object_id ASC,
            d1.sequence_id ASC
        ) 
        AND
            d0.parameter_name = 'area'
    GROUP BY
        d0.object_id

Echter, het aantal records kan snel gaan oplopen (tot 100.000+), waardoor ik het idee heb dat de query erg traag gaat worden (met name door het gebruik van een subquery en IN() ).

Hebben jullie tips voor het optimaliseren van de query om de gewenste output snel te kunnen opvragen? Of kan ik de query beter opdelen?

Alvast bedankt voor jullie tips.

MySQL & PHP hulp nodig.

24-03-2015 discussie 3
Beste tweakers,

ik heb een probleem met mijn php en mysql.

<?php

$conn = mysql_connect("localhost", "root", "root", "cijferlijst");
$sql = "SELECT * FROM cijfers";

if ($conn->query($sql)) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";


foreach ($conn->query($sql) as $row) {
echo "<tr><td>". $row['id'] . "</td><td>" . $row['vak'] . "</td><td>" . $row['leerlingnaam'] . "</td></tr>";
}

echo "</table>";

} else {
echo "Error: ". $sql . "<br>" . $conn->error;
}


?>

Mijn database ziet er als volgt uit.
De database =
http://s14.postimg.org/mmcn5eygd/database1.jpg
Als je doorklikt naar 'cijfers' krijg je dit: http://s24.postimg.org/5qketx3oh/database2.jpg

Ik krijg de inhoud van de tabel niet zichtbaar.

Kan iemand aub helpen?

SQL optimalisatie

13-03-2015 discussie 16
Ik heb één tabel met de volgende structuur.

waardeA waardeB waardeC waardeD waardeE waardeF waardeG


Hierop zit de volgende query.
SQL:
1
SELECT tbl1.waardeF, tbl1.waardeG, tbl2.waardeI, tbl2.waardeH  FROM tabel1 AS tbl1  LEFT JOIN tabel2 AS tbl2 ON tbl1.waardeG = tbl2.waardeH AND tbl2.waardeF = 'het-specifieke-label-nummer'               WHERE tbl1.waardeA = 'een-relatie-nr'  AND tbl1.waardeB    = 'een-volg-nr'  AND tbl1.waardeF = 'het-specifieke-label-nummer'  AND tbl1.waardeC = 0

De join zelf gaat eigenlijk snel, zoals je in bijgevoegde image gaat zien.

http://i.imgur.com/SaUD22x.png

Nja in feite is een index scan ook niet verkeerd, maar alles bij elkaar duurt het gewoon enorm lang. Om wat preciezer te zijn: 00:00:02.2049370 (2.2 seconden dus).

Nu heb ik gewoon een probleem dat er door 'bad-data' door de jaren heen het (nog) niet mogelijk is om een unieke index te maken op basis van meerdere kolommen. Mijn doel was om van waarde a-b-c-f en g een unieke index te maken. Die combinatie zou technisch gezien uniek moeten zijn.

Dus ja, vraag 1: is het logisch om dat te gaan doen (als ik de data uiteindelijk op orde heb?). En zou me dat veel tijd schelen, of is het nog te generiek?

Goed, voor nu dan. Stel dat ik een query uitvoer op basis van -alleen- waardeA (en die returned al bijv. 600 records) dan is dat gewoon instant < 1 seconden. Waarom zou specifiek deze bovenstaande query dan zo 'lang' duren?

Indexen:

Clustered index op waarde A-B-C-F-G.
Non-Clustered index op F met included colomns D en E.

Letterlijk 'alles' wat ik opvraag MITS er maar één in de WHERE clause zit duurt < 1 seconden, bijv. SELECT * FROM table1 WHERE waardeG = foo, maar in zo'n query als bovenstaande duurt het opeens weer lang.. Idem als ik dan nog een 'AND waarde A = bar' erbij zet, dan gaat het opeens niet meer.

Nog een detail, als ik de volledige index eraf flikker dan is het weer wat sneller dan met een index.


Wat zouden jullie doen om het tijdelijk wat sneller te maken, oh en vergeet m'n eerste vraag niet. Antwoorden als 'de fik er in' zijn valide, maar daar heb ik nu even niets aan. O-)

ps. table heeft 23377793 records.
Resultaten per pagina: 25 | 50 | 100
1 2 3 ... 25


Samsung Galaxy S7 edge Athom Homey Apple iPhone SE Raspberry Pi 3 Apple iPad Pro Wi-Fi (2016) HTC 10 Hitman (2016) LG G5

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True