2016-06-02 9 views
0

Ich benutze eine vorbereitete Anweisung, um Daten über ein PHP-Skript, das die MySQL-Funktion AES_ENCRYPT verwendet, zu installieren. Das Problem ist, wird es nicht einfügen, ich einen Fehler:PDO, AES_ENCRYPT und MySQL

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 ''Kelly', '33-04-33', 'female', 'true', 'false', 'false', 'false', 'Rural Route O' at line 1' in G:\PleskVhosts\insurancemidam.com\httpdocs\test\includes.php:186 Stack trace: #0 G:\PleskVhosts\insurancemidam.com\httpdocs\test\includes.php(186): PDOStatement->execute() #1 G:\PleskVhosts\insurancemidam.com\httpdocs\test\confirmation.php(191): dataBaseAccess->insertChildren('11', 'ca25bff56b00791...', 'Kelly', '33-04-33', 'female', '44444444', 'false', 'false', 'false', 'true', 'Rural Route One...') #2 {main} thrown in G:\PleskVhosts\insurancemidam.com\httpdocs\test\includes.php on line 186

Ich habe ohne Erfolg so viele Dinge ausprobiert, ich würde jede Führung oder Richtung wirklich zu schätzen wissen.

Mein PHP

public function insertChildren($employeeID, $key, $childName, $childBirth, $childGender, $childSSN, $isStep, $isFoster, $isStudent, $isHandicap, $address) { 

$conn = $this->connect('insurance'); 

$insertChildren = $conn->prepare("INSERT INTO dependent_children (emp_id, ssn, name, dob, gender, handicap, student, foster, step, address) VALUES (:emp_id, AES_ENCRYPT(:ssn, $key), :name, :dob, :gender, :handicap, :student, :foster, :step, :address)"); 

echo "<h2>$childGender</h2>"; 

$insertChildren->bindParam(":emp_id", $employeeID, PDO::PARAM_INT); 
$insertChildren->bindParam(":name", $childName, PDO::PARAM_STR); 
$insertChildren->bindParam(':dob', $childBirth, PDO::PARAM_STR); 
$insertChildren->bindParam(':gender', $childGender, PDO::PARAM_STR); 
$insertChildren->bindParam(':ssn', $childSSN, PDO::PARAM_LOB); 
$insertChildren->bindParam(':handicap', $isHandicap, PDO::PARAM_STR); 
$insertChildren->bindParam(':student', $isStudent, PDO::PARAM_STR); 
$insertChildren->bindParam(':foster', $isFoster, PDO::PARAM_STR); 
$insertChildren->bindParam(':step', $isStep, PDO::PARAM_STR); 
$insertChildren->bindParam(':address', $address, PDO::PARAM_STR); 

$insertChildren->execute(); 
echo var_dump($insertChildren); 

} 

Nochmals vielen Dank für jede Hilfe.

EDIT: Fest-Code

$insertChildren = $conn->prepare('INSERT INTO dependent_children (emp_id, ssn, name, dob, gender, handicap, student, foster, step, address) VALUES (:emp_id, AES_ENCRYPT(:ssn, :key), :name, :dob, :gender, :handicap, :student, :foster, :step, :address)'); 

echo "<h2>$childGender</h2>"; 

$insertChildren->bindParam(":emp_id", $employeeID, PDO::PARAM_INT); 
$insertChildren->bindParam(":name", $childName, PDO::PARAM_STR); 
$insertChildren->bindParam(':dob', $childBirth, PDO::PARAM_STR); 
$insertChildren->bindParam(':gender', $childGender, PDO::PARAM_STR); 
$insertChildren->bindParam(':key', $key, PDO::PARAM_LOB); 
$insertChildren->bindParam(':ssn', $childSSN, PDO::PARAM_LOB); 
$insertChildren->bindParam(':handicap', $isHandicap, PDO::PARAM_STR); 
$insertChildren->bindParam(':student', $isStudent, PDO::PARAM_STR); 
$insertChildren->bindParam(':foster', $isFoster, PDO::PARAM_STR); 
$insertChildren->bindParam(':step', $isStep, PDO::PARAM_STR); 
$insertChildren->bindParam(':address', $address, PDO::PARAM_STR); 

$insertChildren->execute(); 
echo var_dump($insertChildren); 

} 
+2

Was ist '$ key', warum das nicht so gut binden? – chris85

+1

as @ chris85 gefragt, da Sie alle Params binden, warum ist nicht auch $ Schlüssel? Können Sie versuchen, '$ key' zu binden und zu antworten? –

+0

Dank der beiden Kommentare konnte ich es beheben. Danke so sehr! Ich werde den Beitrag bearbeiten, damit vielleicht andere davon lernen können. – KellyMarchewa

Antwort

1

Das Problem ist, dass $key nicht gebunden zu sein und es ist eine Zeichenfolge, die die Abfrage bricht.

Optionen sind a) bind es b) zitieren Sie es (diese Optionen macht die anderen bindet sinnlos, weil ein einzelnes Zitat in den Wert wird immer noch brechen).

Aktualisieren Sie die Abfrage:

$insertChildren = $conn->prepare("INSERT INTO dependent_children (emp_id, ssn, name, dob, gender, handicap, student, foster, step, address) VALUES (:emp_id, AES_ENCRYPT(:ssn, :key), :name, :dob, :gender, :handicap, :student, :foster, :step, :address)"); 

und die Bindung an:

$insertChildren->bindParam(':key', $key, PDO::PARAM_STR);