[PHP] MySQL Verbindung zwischenspeichern

01/16/2015 14:57 Mikesch01#16
Arbeite doch einfach mit prepare und execute...dafür sind sie ja da. Schwer ist es auch nicht.
01/16/2015 16:11 Mr.Tr33#17
Okay, ich sehe jetzt aber nicht mehr den wirklichen Vorteil zu den MySQL bzw. MySQLi Funktionen von PHP ausser der Cache Funktion vom Login.
01/16/2015 16:19 NotEnoughForYou#18
[Only registered and activated users can see links. Click Here To Register...]
01/16/2015 16:44 Mikesch01#19
Quote:
Originally Posted by Mr.Tr33 View Post
Okay, ich sehe jetzt aber nicht mehr den wirklichen Vorteil zu den MySQL bzw. MySQLi Funktionen von PHP ausser der Cache Funktion vom Login.
Vorteile von PDO zu MySQL:
Sicherheit!!!, Wiederverwendbarkeit durch Objektorientierung, Portabilität zu anderen Datenbanken
01/16/2015 17:48 Mr.Tr33#20
Mehr Sicherheit sehe ich da nicht. Ich muss in beiden trotzdem etwas machen, damit es erst dann sicher ist.
Rest, ja Ok. Aber wenn man eh nur MySQL benutzt hat und Objecte sind nur schöner anzusehen.
01/16/2015 18:14 Mikesch01#21
Quote:
Originally Posted by Mr.Tr33 View Post
Mehr Sicherheit sehe ich da nicht. Ich muss in beiden trotzdem etwas machen, damit es erst dann sicher ist.
Rest, ja Ok.
Mit den "Prepared Statements" ist eben diese Sicherheit da, ohne extra weitere Sicherheitsfunktionen aufrufen zu müssen.

MySQL ist deprecated und wird nicht mehr weiterentwickelt. Das ist schon mal der wichtigste Punkt zum Umstieg. PDO ist die Zukunft.

Gruß
01/16/2015 20:36 NotEnoughForYou#22
Wenn du dir beispielsweise eine eigene DB Klasse auf Basis von PDO machst, kannst du es so machen, dass die Parameter autoamtisch gebunden werden und escaped werden. Kannst dann einfach sagen:

PHP Code:
$db->fetch("SELECT * FROM tab1 WHERE id = ?", array($_POST['id'])); 
Das kannst du mit beliebigen vielen Parametern machen und die werden automatisch escaped (schonmal 1 Vorteil).

PDO ist objektorientiert (gut mysqli auch, aber deutlich besser finde ich).
PDO unterstützt viele Datenbanktreiber (mysql/mysqli nur einen).

etc.
01/16/2015 21:28 Synatex#23
Und um es anzumerken: Objekte sind nicht nur schöner anzusehen. Die bringen ne' Menge Vorteile :)
01/19/2015 12:18 Mr.Tr33#24
Zurück den zu den Problemen :D

Ich benutze jetzt diese :variablen
So wie ich es verstanden habe, werden diese dann einfach eingesetzt.
Wieso meckert PDO dann, wenn es mehr Variablen in dem Array sind als im Query gebraucht wird? Ich meine die sind dann doch Wurst.
01/19/2015 12:38 Mikesch01#25
Diese ":variable" sind Platzhalter im Query. Du musst nun für jeden Platzhalter genau einen Wert einfügen.
01/19/2015 13:02 Mr.Tr33#26
Ja ok, aber was ist wenn ich mehr angebe als ich brauche?
z.B.
Code:
INSERT INTO `test` (a, b, c) VALUES (:a, :b, :c)
Und mein Array so aussieht:
Code:
:a => 1
:b => 2
:c => 3
:d => 4
:d wird ja nirgends eingesetzt und kann ja somit dann eigentlich irgoniert werden.
01/19/2015 13:29 Synatex#27
Wird aber nicht ignoriert.
01/19/2015 21:56 Mr.Tr33#28
Bis jetzt finde ich mit PDO zu arbeiten irgend wie anstrengender >.>

Folgendes Problem:
Ich habe ein extrem langen Query (automatisch genieren lassen, sodass kein Fehler ist) und ihn mit execute "ausfüllen" lassen. Jetzt bekomme ich mit errorInfo vor und nach dem execute folgenden "Fehler":
Code:
array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  NULL
  [2]=>
  NULL
}
Jedoch trägt es nicht in die Datenbank ein (ist ein INSERT).

Hatte jemand von euch schon mal so etwas?
Ich kann euch ja leider den Query nicht zeigen, benutze ja prepare >.>
01/19/2015 22:00 Synatex#29
Das prepare-Statement Objekt beinhaltet den Query den du geschickt hast, jedoch nur mit platzhalter.

Einfach

PHP Code:
<?php

var_dump
($preparedObject->queryString);

?>
ausgeben.
01/19/2015 22:18 Mr.Tr33#30
Ja ok, mein Query sieht normal aus ohne einem Fehler.
Woran könnte sonst der Fehler liegen?
Code:
INSERT INTO `account` (login,password,email,question1,answer1,question2,answer2,create_time,web_ip,web_aktiviert) VALUES (:login,:password,:email,:question1,:answer1,:question2,:answer2,NOW(),"92.60.148.201","1")