Query $_Post in PDO

Hallo Leute,

bis jetzt konnte ich $_Post im mysql_query mit einen mysql_real_escape_string implementieren und den SQL query direct auslesen.

Hier ist mein mysql_query bsp:
SELECT DISTINCT display FROM App WHERE Id = ‚".mysql_real_escape_string($_POST[‚id‘])."‘ Geht das mit einer PDO Verbindung auch?

Vielen Dank für AW.

Lg,
Chris

normalerweise ist die zuweisung der variablen ohne escapen gültig
das macht das PDO modul für dich.

http://www.phpeveryday.com/articles/PDO-Insert-and-U…

prepare
und execute

das macht das nötige für dich .

komm wech von selbst zusammen gesetzen SQL statements . Das Modul hat sich um die variablen zu kümmern .

Hallo TechPech,

vielen Dank für deine hilfreichen AW.
Ich hätte noch ein paar Fragen zu PDO–> es wär super wann wir darüber kurz auf skype reden könnten (cschweighofer)?

z.Bsp: Versuche ich die Insert und Queries auszuführen:
$insertSQL = db->query("INSERT INTO wp_users (first_name, last_named, user_login, user_email, user_pass, country, user_activation_key, for_whom) VALUES (
$_POST[‚strFirst_Name‘],
$_POST[‚strLast_Name‘],
$_POST[‚strEmail‘],
$_POST[‚strEmail‘],
$password,
$_POST[‚country‘],
$random_number,
$user_type);

$Result1 = $db->query($insertSQL);

Ich würde auch php functions verwenden um Inserts, Updates einfacher durchzuführen:
public function insert($table, $values)
{
$this->conn();
/*** snarg the field names from the first array member ***/
$fieldnames = array_keys($values[0]);
/*** now build the query ***/
$size = sizeof($fieldnames);
$i = 1;
$sql = „INSERT INTO $table“;
/*** set the field names ***/
$fields = ‚( ’ . implode(‘ ,’, $fieldnames) . ’ )’;
/*** set the placeholders ***/
$bound = ‚(:‘ . implode(’, :’, $fieldnames) . ’ )’;
/*** put the query together ***/
$sql .= $fields.’ VALUES '.$bound;

/*** prepare and execute ***/
$stmt = $this->db->prepare($sql);
$flag = false;
/*foreach($values as $vals)
{*/
$flag = $stmt->execute($values);
/*}*/
return $flag;
}

Jedoch ohne Erfolg.
Es wäre sehr hilfreich wenn ich eine funktionierende INSERT hätte.
Aus unerklärlichen Gründen funktionieren die INSERTS des Manuals auch nicht:
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Devel…

Lg,
Chris

Lieber Chris_122
können wir uns darauf einigen das irgendwo in der Beschreibung warum man PDO nehmen sollte ? Richtig es macht injections weit aus schwieriger .

Im folgenden ist der alte ablauf

SQL Statement inclusive variablen als String zusammengesetzt
das geht dann so zum server

problem , damit ist schon der befehl SELECT oder INSERT etc angreifbar .
Deswegen haben sich die erfinder gedacht erst mit prepare die Anweisung schicken mit platzhaltern
und dann mit execute die daten schicken und ergebnis ermitteln .

Wenn du aber anfängst die Variablen nicht über das 2 wege system zu liefern dann haben wir schon im ansatz das sicherheitsproblem gekillt und hätten bei mysql normal bleiben können .

logisch oder ??

Also guck dir nochmal den Syntax an der genommen werden muss .
Bei deiner PDO version , nachgucken . google ist dein freund , google und befehl und ab gehts

Danke für die Erklärung.

Lieber TechPech,

was wäre wenn das Query folgendermaßen ausgeführt werden würde.
Wäre das dann eine Sicherheitslücke da die Bindingparameter durch ein PHP Funktion getrennt werden?

public function insert($table, $values)
{
$fieldnames = array_keys($values);
$sql = „INSERT INTO $table“;
$fields = ‚( ’ . implode(‘ ‚, $fieldnames) . ’ )‘;
$bound = ‚(:‘ . implode(’, $fieldnames) . ’ )’;
$sql .= $fields.’ VALUES '.$bound;
/*** prepare and execute ***/
$stm = $db->prepare($sql);
$flags = $stm->execute($values);
}

$table = ‚us‘;
$value = array( ‚First_Name‘ => $_POST[‚strFirst_Name‘] );

$Result1=$db->insert( $table, $value );

Lg,
Chris

Hallo Chris,

Lieber TechPech,

was wäre wenn das Query folgendermaßen ausgeführt werden
würde.
Wäre das dann eine Sicherheitslücke da die Bindingparameter
durch ein PHP Funktion getrennt werden?

public function insert($table, $values)
{
$fieldnames = array_keys($values);
$sql = „INSERT INTO $table“;
$fields = ‚( ’ . implode(‘ ‚, $fieldnames) . ’ )‘;
$bound = ‚(:‘ . implode(’, $fieldnames) . ’ )’;
$sql .= $fields.’ VALUES '.$bound;
/*** prepare and execute ***/
$stm = $db->prepare($sql);
$flags = $stm->execute($values);

Du concattest Strings(very bad) im pdo Manual (http://php.net/manual/de/pdo.prepare.php) steht doch wie man so was macht.
Ob du nun den ?-Parameter nutzt oder Stringnamen ist dabei egal, schau dir mal die 2 Beispiele auf der Webseite an und mach es genau so.

Gruß XXD

2 Like

Vielen Dank für die schnelle AW.

Die PDO Beschreibung zeigt Select queries und keine Insert queries.
Aber ich glaub in diesem Fall kommt es auf das selbe?

Hallo

Vielen Dank für die schnelle AW.

Die PDO Beschreibung zeigt Select queries und keine Insert
queries.

stimmt nicht , ich hab dir einen link gegeben wo es gezeigt wird ,
das du das nicht machen willst und auch nciht ausprobierst
ist dein problem ,
das sicherheitskonzept heisst variablen übergeben
und eigentlich ist alles nur ein prepare und execute
ob man sich dann die daten abholt (fetch , last inserted) ist deine sache :wink:

Also halte dich ans PDO Konzept ansonsten wunder dich nicht das das PDO Modul solche direkten Wertzuweisungen nicht zulässt .

Ich glaub eher dein Problem ist nicht der INSERT sondern das du es nicht so machst wie da steht .

1 Like

Hier dann noch die weiterführenden möglichkeiten
Try and Catch blöcke etc
http://code.tutsplus.com/tutorials/why-you-should-be…