2016-03-23 21 views
0

• Ich versuche also, meine Codierungsgewohnheiten zu ändern und SQL-Injektionen zumindest zu verhindern. Ich bin jedoch immer noch verwirrt über die Parameter oder die Syntax beim Erstellen einer Abfrage. Zum BeispielWerte mit PDO einfügen

$q = //LINE 1 "insert into tblProject(projectName, projectLocation, projectType, projectStatus) //LINE 2 values(:projectName, :projectLocation, :projectType, :projectStatus);";

Ich glaube, dass die erste Zeile der Spalte Name bezieht sich in der Datenbank, aber in LINE 2, was bedeutet ‚:“ bedeutet und was es tut Woher kommt die Werte innerhalb des values() ? Referenzen Does verweist sie auf die Variable I erklärt, zum Beispiel, $projectName = $_POST['projectName']; ist es auf den $ Projektnamen oder den Wert innerhalb der $_POST['projectName']

bezieht • Eine andere Frage all diese ...->execute(array(...)); ist Lassen sie sich diesen Code als Beispiel.?:

$results = $query->execute(array(
":projectName"  => $projectName, 
":projectLocation" => $projectLocation, 
":projectType"  => $projectType, 
":projectStatus" => $projectStatus 
)); 

Können Sie kurz erklären, was genau es macht? Und auch, wo ist :projectName und so weiter .. Kam aus oder wo ist ihre Herkunft?

• Es verwendet ein Array(). Wenn ich also nur einen einzelnen Wert aktualisieren oder einfügen und execute(array()) verwenden würde, würde das einen Fehler verursachen?

Ich glaube, ich frage zu viel Frage, irgendwelche gute Referenzen, wo ich die meisten Antworten hier finden kann?

Vielen Dank im Voraus.

+2

Mit PDO können Sie sowohl' 'someName''- als auch unbenannte' '' - Platzhalter verwenden. Diese werden einfach durch die Werte ersetzt, die Sie in execute übergeben. Sie können mehr in der Dokumentation lesen: http://php.net/manual/en/pdo.prepare.php – JimL

Antwort

2

Die beiden Teile Ihrer Frage sind gleich. Die Namen mit den Doppelpunkten geben an, wie Sie den Namen Ihrer Bindung angeben. Wenn Sie bindValue/bindParam verwenden oder ausführen, sagen Sie "this: Parameter ist eigentlich dieser Wert". So wird es dauern Anfrage:

$q = "insert into tblProject(projectName, projectLocation, projectType, projectStatus) 
    values(:projectName, :projectLocation, :projectType, :projectStatus);"; 

Dann, wenn Sie es mit dieser ausführen:

$results = $query->execute(array(
":projectName"  => $projectName, 
":projectLocation" => $projectLocation, 
":projectType"  => $projectType, 
":projectStatus" => $projectStatus 
)); 

der Fahrer gehen und sagen: „Okay, so muss der Wert von $ Projektname zu entkommen und anstelle von: projectName in der Abfrage verwendet, und $ projectLocation sollte sein: projectLocation ... "und so weiter

+0

Oh. Woher kamen die Namen mit Doppelpunkten? Ist es der Name des '' oder woanders? – Jerlon

+0

@ user4932301 Sie können sie benennen, was auch immer Sie wollen. Der Punkt ist, dass bei benannten Platzhaltern der Name, den Sie in der Abfrage haben, mit den Namen übereinstimmt, die an execute übergeben wurden. Bei ungenannten Platzhaltern werden sie nach der Reihenfolge sortiert. – JimL

+0

@ user4932301 Sie geben sie einfach ein. Sie können sie nennen, was immer Sie wollen (innerhalb des Grundes http://stackoverflow.com/a/5810058/4333555), z. ': dumbplaceholder1' bind dann 'execute (array ( ": dumbplaceholder1 "=>' – chris85