Je kunt met mysqli gebruik maken van nieuwere features in MySQL zoals transacties en prepared statements.quote:Op zondag 28 oktober 2012 14:24 schreef Devolution het volgende:
Wat is eigenlijk een grote voordeel van mysqli ten opzichte van mysql? Of waarom zou ik mysql niet meer gebruiken maar daarvoor in de plaats mysqli (behalve omdat mysql uitgefaseerd wordt)?
Er vinden geen transacties plaats. Het was mij alleen om de eventuele overhead te doen. Maar aangezien die er niet of nauwelijks is, is er geen reden meer om een verbinding open te houden. In ASP.NET was het overigens vrij makkelijk op te lossen. Daar doe je, indien er fouten optreden gewoon een rollback op de transactie en geef je alles weer vrij. Ik neem aan dat dit in PHP ook wel mogelijk is.quote:Op zondag 28 oktober 2012 10:45 schreef GlowMouse het volgende:
De connection overhead is er nauwelijks, het is een non-optimalisatie. En wat gebeurt er als je in een script een lock zet in een transactie en dat script stopt er midden in een transactie mee door een fout, en een ander script gaat met die connectie verder?
Met PDO of mysqli kan dat, maar met de oude mysql_ functies kun je überhaupt geen transacties doen, dus ook geen rollback.quote:Op zondag 28 oktober 2012 15:04 schreef Devv het volgende:
[..]
Daar doe je, indien er fouten optreden gewoon een rollback op de transactie en geef je alles weer vrij. Ik neem aan dat dit in PHP ook wel mogelijk is.
Maar qua veiligheid is er geen verbetering?quote:Op zondag 28 oktober 2012 14:36 schreef Tijn het volgende:
[..]
Je kunt met mysqli gebruik maken van nieuwere features in MySQL zoals transacties en prepared statements.
Is dat bij mysqli niet meer nodig dan?quote:
Nou, je zou kunnen zeggen dat de mogelijkheid om mislukte queries te rollbacken in een transactie of het automatisch escapen van variabelen in prepared statements wel een impact hebben op de security. Het is natuurlijk nog steeds mogelijk om onveilige code te schrijven, net zoals het mogelijk is om met de oude mysql-functies veilige code te schrijven, maar je hoeft je met mysqli en PDO misschien in wat minder bochten te wringen om het goed te doen.quote:Op maandag 29 oktober 2012 09:57 schreef Devolution het volgende:
[..]
Maar qua veiligheid is er geen verbetering?
Niet als je prepared statements gebruikt en je variabelen via bindParam() in je query laat plaatsen, dan gebeurt dat automatisch.quote:Is dat bij mysqli niet meer nodig dan?
dat kan wel, mysql_query("START TRANSACTION")quote:Op zondag 28 oktober 2012 15:36 schreef Tijn het volgende:
[..]
Met PDO of mysqli kan dat, maar met de oude mysql_ functies kun je überhaupt geen transacties doen, dus ook geen rollback.
Handmatig kan je inderdaad van alles. Maar er zijn geen ingebouwde functies voor. Volgens de documentatie wordt het ook niet aangeraden om van nieuwe features op deze manier gebruik te maken.quote:Op maandag 29 oktober 2012 11:26 schreef GlowMouse het volgende:
[..]
dat kan wel, mysql_query("START TRANSACTION")
Ah, inderdaad, dat werd door Innodb gebracht. Maar dan nog wordt volgens de documentatie het sterk afgeraden om MySQL 4.1.3 of later te gebruiken in combinatie met de oude mysql_ functies. Dat is een dusdanig oude versie van MySQL (uit 2004 ofzo?) dat het praktisch voor elke situatie nu niet verstandig is om ermee aan de slag te gaan voor een nieuw project.quote:Op maandag 29 oktober 2012 12:41 schreef GlowMouse het volgende:
transacties zijn geen nieuwe features
| 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 | <?php private function getFileName($digit_number){ $new_file_name = ""; for($i = 0; $i < $digit_number; $i++){ $flag = rand(0,2); switch($flag){ case 0:{ $new_file_name .= chr(rand(48,57)); break; } case 1:{ $new_file_name .= chr(rand(65,90)); break; } case 2:{ $new_file_name .= chr(rand(97,122)); break; } } } return $new_file_name; } ?> |
Ik zou persoonlijk voor PDO gaan, dan heb je gelijk een databaseonafhankelijke abstractielaag.quote:Op maandag 29 oktober 2012 17:47 schreef Devolution het volgende:
Oke, bedankt voor de info. Misschien toch maar eens overschakelen dan
Efficiënte manier om random strings te genereren.quote:Op donderdag 1 november 2012 08:57 schreef Boze_Appel het volgende:
[ code verwijderd ]
Code evalueren van anderen, is niet goed voor mijn bloeddruk.
quote:Op donderdag 1 november 2012 09:05 schreef mstx het volgende:
[..]
Efficiënte manier om random strings te genereren.
quote:Op donderdag 1 november 2012 08:57 schreef Boze_Appel het volgende:
[ code verwijderd ]
Code evalueren van anderen, is niet goed voor mijn bloeddruk.
Van die code zie je in 10 seconden wat er gebeurt.quote:Op donderdag 1 november 2012 08:57 schreef Boze_Appel het volgende:
[ code verwijderd ]
Code evalueren van anderen, is niet goed voor mijn bloeddruk.
Ik zie een verband.quote:Op donderdag 1 november 2012 14:45 schreef Chandler het volgende:
Je kunt je code natuurlijk ook gewoon voor jezelf houdenik heb anders nog nooit WTF gehoord
Het probleem is al opgelost. Ik heb de database geleegd en de auto_increment teller gereset. Toen heb ik alles opnieuw naar de database weg laten schrijven en met Chrome ingelogd op MyPhpAdmin. Met Firefox liep de boel dus vast en gaf 'ie een foutmelding dat ik aan de sizelimit zat.quote:Op zaterdag 3 november 2012 16:10 schreef StM het volgende:
Wat werkt er niet meer (krijg je een error?) en welke database gebruik je?
Dat blijkt nu het geval te zijn: Warning: mysqli::mysqli(): (08004/1040): Too many connectionsquote:Op maandag 5 november 2012 13:03 schreef Farenji het volgende:
tenzij de connecties niet goed hergebruikt worden en je op den duur tegen de max_connections limiet aanloopt.
Heb het erin gezet (en mysql opnieuw gestart), maakt geen verschil. Ik krijg na 2 minuten alweer "too many connections".quote:Op maandag 5 november 2012 13:26 schreef GlowMouse het volgende:
Probeer eens mysql.allow_persistent=Off en mysqli.allow_persistent=Off
Ja bijna allemaalquote:Op maandag 5 november 2012 13:32 schreef GlowMouse het volgende:
Kijk dan eens in apache's server-status of er clients verbonden blijven.
Ik heb het nu zo:quote:Op zondag 4 november 2012 20:43 schreef pascal08 het volgende:
Wat is de juiste manier om URL's met CodeIgniter te rewriten in htaccess, zonder dat het pad naar m'n CSS-file wordt gerewrite waardoor m'n CSS-file niet correct geladen wordt?
Ik had het al maanden zo draaien, kun je nagaan.quote:Op maandag 5 november 2012 22:10 schreef GlowMouse het volgende:
Pagina's deden er dus daadwerkelijk een halve minuut over om te laden, dat zou je sowieso snel door moeten hebben.
quote:Dit bestand bestaat niet, de toegang tot het volgende bestand is beperkt of het bestand is verwijderd wegens overtreding van het auteursrecht.
Nice dat het gefixt is!quote:Op maandag 5 november 2012 21:56 schreef mstx het volgende:
Nou ik ben er 5 uur mee bezig geweest, maar eindelijk gevonden waar die sleeping processes vandaan kwamen.![]()
Het bleek te komen door de manier waarop ik user variables opsloeg in APC. Ik heb bijvoorbeeld nieuwsberichten of forum topics die ik met apc_store() opsloeg om te cachen. Eerst deed ik dit allemaal in één grote array met alle items erin (dus $forum=array(1=>'bericht1', 2=>'bericht 2'), $nieuws=array() etc). Nu heb ik ze allemaal hun eigen variabele gegeven. Nu is mijn script ineens 100x zo snel.![]()
Nu ze allemaal apart staan hoeven ze niet meer op elkaar te wachten als 5 mensen tegenlijk 5 verschillende nieuwsberichten lezen en deze tegelijkertijd gecached worden, dan kan het script meteen verder en de mysql connectie sluiten... best stomme fout als je er zo achteraf over nadenkt.
quote:Op maandag 5 november 2012 22:13 schreef mstx het volgende:
[..]
Ik had het al maanden zo draaien, kun je nagaan.
* mstx gaat zich diep schamen
Ik kan gewoon inloggen.quote:Op dinsdag 6 november 2012 21:05 schreef BrainOverfloW het volgende:
Hier meer mensen met een GitHub account en zo ja, kunnen jullie inloggen?
Ik heb me net aangemeld maar als ik in wil loggen blijft de site op de inlog pagina hangen of word ik terug gestuurd naar de homepage zonder ingelogd te zijn. Gebruikersnaam en wachtwoord pakt hij wel want ik krijg geen melding dat ik een fout heb gemaakt bij het intypen. Dus doe ik iets verkeerd of gaat er iets fout aan de kant van GitHub?
Je bedoelt UTF-8 in m'n database toch? Ik gebruik nu latin1_swedish_ci:quote:Op woensdag 7 november 2012 01:32 schreef GlowMouse het volgende:
Altijd voor UTF-8 kiezen, je kunt altijd een andere charset kiezen als je op zo'n rare i wilt zoeken.
Ik heb het nu dus zo:quote:Op woensdag 7 november 2012 01:44 schreef pascal08 het volgende:
[..]
Je bedoelt UTF-8 in m'n database toch? Ik gebruik nu latin1_swedish_ci: [ afbeelding ]
Moet ik alles weer opnieuw in de database invoeren of veranderd 'ie alles "on-the-fly"?
Dat vermoedde ik al, ik zal het dus opnieuw moeten invoeren. Moet ik nog iets als utf8_encode() gebruiken bij het invoeren?quote:Op woensdag 7 november 2012 01:50 schreef StM het volgende:
Omdat het nu corrupt in je database is opgeslagen
Bedoel je zo?quote:Op woensdag 7 november 2012 01:58 schreef StM het volgende:
Je kan beter je hele app van UTF-8 gebruik laten maken. Juiste headers sturen etc.
| 1 2 3 | <?php header("Content-type: text/html; charset=utf-8"); ?> |
| 1 2 3 | <?php mysql_query("SET NAMES 'utf8'") ?> |
Waar plaats ik die regel dan? Gewoon bovenaan m'n php script? Ik ben echt nog een newbie.quote:Op woensdag 7 november 2012 02:03 schreef StM het volgende:
Ik persoonlijk geef de voorkeur aan
[ code verwijderd ]
omdat dat soort meta tags als je ze verkeerd (te laat) gebruikt vooral bij oudere IE versies kan zorgen dat hij de pagina 2x moet parsen.
*edit*
Hier trouwens een handige checklist: http://blog.loftdigital.com/blog/php-utf-8-cheatsheet
edit2:
en vergeet
[ code verwijderd ]
niet, via de adapter die jij gebruikt(Wss MySQLi of PDO)
Gewoon bovenaan m'n header.php die elke pagina wordt geladen?quote:Op woensdag 7 november 2012 02:09 schreef StM het volgende:
Headers moet je versturen voor de eerste output. Dus ergens bovenaan of op een centrale plek.
Ja, dat is dus header.php bij mij.quote:Op woensdag 7 november 2012 02:13 schreef StM het volgende:
Bv ja, hoewel je voor 1 regel code niet een aparte file hoeft aan te makenWel kan je iets van een common.php aan maken die je altijd laad waar je dit maar ook andere defaults regelt.
Codering in m'n editor nu:quote:Op woensdag 7 november 2012 02:18 schreef StM het volgende:
Die file ook als UTF-8 opslaan, vaak is dit een optie van je editor.
Waar doe ik dat?quote:Op woensdag 7 november 2012 02:22 schreef StM het volgende:
Heb je wel je verbinding op UTF-8 gezet zoals ik had gezegd?
Zo?quote:Op woensdag 7 november 2012 02:25 schreef StM het volgende:
Als eerste query SET NAMES 'utf8' uitvoeren
Is dat collatie? Ja, die staat op UTF-8.quote:Op woensdag 7 november 2012 02:35 schreef StM het volgende:
Check je het via PHPMyAdmin? Staat de karakterset wel goed? (Dus op UTF-8)
Metquote:Op woensdag 7 november 2012 02:43 schreef StM het volgende:
Dan vermoed ik toch dat de waarden in je file niet echt UTF-8 is. Gooi er eens utf8_encode omheen.
Ik weet wel uit ervaring dat dit soort issues een ramp zijn om te debuggen
| 1 2 3 | <?php mysql_query(utf8_encode("UPDATE `table` SET `name`='García Fernández' WHERE `id`=1")); ?> |
Yes! Gelukt.quote:Op woensdag 7 november 2012 02:48 schreef StM het volgende:
Welke browser heb je? Klik namelijk eens in phpmyadmin rechts en dan naar de pagina eigenschappen wat de karakter set is.
| 1 2 3 | <?php mysql_query("SET NAMES 'utf8'"); ?> |
Weet ik dus ook niet, misschien niet refresht in m'n browser toen ik het script ging uitvoeren.quote:Op woensdag 7 november 2012 02:53 schreef StM het volgende:
Hmm waarom werkte het net niet dan?Dat had je net toch ook?
...maar goed, dat komt morgen wel, ik ben al lang blij dat je m'n probleem met de database hebt opgelost.quote:Op woensdag 7 november 2012 01:18 schreef pascal08 het volgende:
Ik heb nogal een lastig probleem. Ik weet niet wat de handigste manier is om letters met een accent in m'n database op te slaan, met betrekking op het volgende:
Momenteel is de í (i met accent acute) in de database opgeslagen als een Ã. Nu wil ik graag kunnen zoeken naar een woord met een í, zonder dat ik het accent erbij hoef te typen. Ik wil dus de í kunnen vinden door gewoon een i te typen.
Het is sowieso handig dat ik dat even ga lezen ja. Ik ben echt de basis van het programmeren aan het leren en het lijkt me wel handig om dit soort dingetjes te snappen. Ben in ieder geval al een heel eind dankzij hulp van mensen hier.quote:Op woensdag 7 november 2012 02:59 schreef StM het volgende:
Met je collate bepaal je op welke manier hij gaat zoeken. Maar dat is iets te complex om 123 in een post uit te leggen dus ga morgen daar maar eens de manual over lezenVoor wat jij wil is volgens mij een collate die dat kan, maar ik weet niet zo welke dat is.
Dat alles standaard in latin1 staat vind ik ook nogal vreemd, daarom heb ik nu alles in utf8, veel universeler inderdaad. Ik ga zo weer aan de slag ermee. Alles staat nu in ieder geval in utf8 in m'n database dankzij StM.quote:Op woensdag 7 november 2012 09:23 schreef Farenji het volgende:
Hehe, al die encoding shit is een van de meest complexe dingen die er zijn. Omdat het er zoveel zijn, en omdat conversie van de ene naar de andere erg lastig kan zijn. De belangrijkste tip die ik je kan geven: gebruik *vanaf het begin*, overal, de zelfde encoding, en gebruik geen latin1 maar utf8. De default collation van mysql is nog steeds latin1 en dat zuigt. De wereld is groter dan West-Europa. In utf8 wordt een letter met accent opgeslagen als een letterbyte + een accentbyte dus dat maakt zaken ook makkelijker.
Raar, maar waar.quote:Op woensdag 7 november 2012 14:53 schreef StM het volgende:
Het is een server instelling, maar eigenlijk overal is het iets van latin1 tenzij anders gespecificeerd
| 1 2 3 | <?php mysql_query("SET NAMES 'utf8'"); ?> |
Die standaardinstelling van latin1 komt doordat MySQL oorspronkelijk door een chauvinistische Zweed is gemaakt en niemand later de moeite heeft genomen dit aan te passen.quote:Op woensdag 7 november 2012 14:47 schreef pascal08 het volgende:
[..]
Dat alles standaard in latin1 staat vind ik ook nogal vreemd, daarom heb ik nu alles in utf8, veel universeler inderdaad. Ik ga zo weer aan de slag ermee. Alles staat nu in ieder geval in utf8 in m'n database dankzij StM.
Mwua of het komt door Monty durf ik eigenlijk niet te zeggen. Je ziet het nog steeds eigenlijk overal. De meeste file editors slaan volgens mij ook nog steeds default in latin1 op en zolang iedereen dat doet zal ook iedereen dat blijven doen. De default van postgresql is dacht ik ook nog steeds latin.quote:Op woensdag 7 november 2012 15:13 schreef Farenji het volgende:
[..]
Die standaardinstelling van latin1 komt doordat MySQL oorspronkelijk door een chauvinistische Zweed is gemaakt en niemand later de moeite heeft genomen dit aan te passen.
Ik heb een keer een stuk of 10 databases van meerdere GB's mogen converteren van latin1 naar utf8 hierdoor; vervelende bijkomstigheid was dat de data stiekem al utf8 was maar dan opgeslagen als latin1; bij ophalen van de data uit de db werd alles op byte niveau naar utf8 omgevrot op een nogal ranzige manier. Als je dat niet weet en dus de verkeerde aannames doet kom je echt in een vreselijke encoding-hell terecht...
Ik kreeg laatst ook een XML aangeleverd waar in de header stond "Windows-1252" maar de inhoud bleek een andere encoding te zijn. Da's pas lachen.quote:Op woensdag 7 november 2012 15:29 schreef StM het volgende:
Die conversie hell ken ik trouwens ook heel erg goedOok een hele leuke: een feed van een externe partij die een soort mix aanlevert. Delen UTF-8 (wat het had moeten zijn en wat ze ook dachten dat het was) en delen latin. Of juist dubbel geëncodeerd. Dan ga je echt blij worden...
Meh, ik ben er nog iets vergeten bij te vermelden. Het berekenen daarvan moet wel in een PHP-script gebeuren. Dit aangezien ik vanuit een OpenLayers-script elke seconde de locaties opvraag.quote:Op woensdag 7 november 2012 13:28 schreef Xanland het volgende:
Goeiedag heren,
Even een klein vraagje met betrekking tot maps/kaarten. Op dit moment heb ik coördinaten en een afstand die moet worden afgelegd tussen 2 coördinaten. Nu moet ik op de één of andere manier zien te berekenen hoe laat een bepaalde bus waar rijdt. Van alle lijnen heb ik een route in polylinevorm met coördinaten beschikbaar. Nu moet ik op de één of andere manier zien te berekenen waar een lijn/bus zich op dat moment bevindt aan de hand van haltetijden.
Iemand die mij hier een tip/tik/schopje over mee kan geven van hoe zoiets het beste te realiseren is?Op woensdag 7 november 2012 13:34 schreef KomtTijd... het volgende:
http://wiki.openstreetmap.org/wiki/Gosmore
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |