2017-03-24 5 views
-2

PHP/MySQLkeep einen Syntaxfehler bekommen (PHP/MySQL)

ich diese Fehler werden immer: „Sie haben einen Fehler in der SQL-Syntax, kontrollieren das Handbuch, die für die richtige Syntax zu Ihrer MySQL-Server-Version entspricht in der Nähe von "1" in der Linie 1 zu verwenden.

Ich bin bemüht, diese Abfrage zu passieren. Es funktioniert, es fügt in die mysql-Datenbank ein, aber dieser Fehler erscheint jedes Mal. Ich habe versucht, alles in der gleichen Zeile zu verwenden, doppelte Anführungszeichen in einfache Anführungszeichen geändert, alle Leerzeichen entfernt, die alles in die gleiche Zeile eingefügt haben, und die Art und Weise geändert, wie ich die Variablen ({$ Variable} an '. $ Variable.') Übergebe. und alles andere. Ich habe ein paar Stackoverflow-Fragen dazu gesehen, aber mit unterschiedlichen Lösungen. Ich weiß, dass wir '' in numerischen Feldern nicht übergeben können.

Ich denke, ich habe jetzt keine Optionen mehr. Brauche Hilfe! Dieser Fehler hält zeigt aber die Daten korrekt in meiner Tabelle eingefügt wird

hier ist der Code:

$user_id = get_current_user_id(); 
$prescription_name = $_POST['prescription_name']; 
$date_created = date('Y-m-d'); 
$last_updated = date('Y-m-d'); 
$right_eye_sphere = $_POST['right_eye_sphere']; 
$left_eye_sphere = $_POST['left_eye_sphere']; 
$right_eye_cylinder = $_POST['right_eye_cylinder']; 
$left_eye_cylinder = $_POST['left_eye_cylinder']; 
$right_eye_axis = $_POST['right_eye_axis']; 
$left_eye_axis = $_POST['left_eye_axis']; 
$pd = $_POST['pd']; 
$date_of_birth = $_POST['date_of_birth']; 
$file_path = $_POST['file_path']; 

$add_query = "INSERT INTO wew_prescription (
     prescription_id, 
     user_id, 
     prescription_name, 
     date_created, 
     last_updated, 
     right_eye_sphere, 
     left_eye_sphere, 
     right_eye_cylinder, 
     left_eye_cylinder, 
     right_eye_axis, 
     left_eye_axis, 
     pd, 
     date_of_birth, 
     file_path 
     ) Values (
     NULL, 
     {$user_id}, 
     '{$prescription_name}', 
     '{$date_created}', 
     '{$last_updated}', 
     '{$right_eye_sphere}', 
     '{$left_eye_sphere}', 
     '{$right_eye_cylinder}', 
     '{$left_eye_cylinder}', 
     '{$right_eye_axis}', 
     '{$left_eye_axis}', 
     '{$pd}', 
     '{$date_of_birth}', 
     '{$file_path}' 
     )"; 

    $sql = $dbCon->query($add_query); 

    if (!mysqli_query($dbCon,$sql)){ 
     die('Error: ' . mysqli_error($dbCon)); 
    }else{ 
     mysqli_query($dbCon,$sql); 
     echo "dados atualizados!"; 
    } 
+0

Ihr Skript ist in Gefahr von [SQL Injection Attack] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) Werfen Sie einen Blick auf, was passiert ist [Little Bobby Tables] (http://bobby-tables.com/) Sogar [wenn Sie Eingaben entgehen, ist es nicht sicher!] (Http://stackoverflow.com/questions/5741187/sql-injection-that-gets -around-mysql-real-escape-string) Verwenden Sie [vorbereitete parametrisierte Anweisungen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). –

+0

Es ist ungewöhnlich, objektorientierte Stilfunktionsaufrufe '$ conf'-Abfrage ($ sql)' und Prozedurfunktionsaufrufe 'mysqli_query ($ con, $ sql)' zu mischen. Es ist auch etwas seltsam, das Ergebnis einer Abfrageausführung einer Variablen mit dem Namen $ sql zuzuweisen. Es ist nur ein variabler Name, es kann was auch immer sein. Aber wenn ich etwas einer Variablen mit dem Namen '$ sql' zuweisen würde, wäre es der SQL-Text, der Stringwert würde $ add_query' zugewiesen werden. Wie Barmar sagt, führt der Code die Zeichenfolge "1" aus. – spencer7593

+0

danke Jungs! Ich schaue mir die vorbereiteten parametrisierten Anweisungen an! Ich bin ein Front-End-Entwickler lernen mysql –

Antwort

2

Der Fehler von dieser Linie kommt:

if (!mysqli_query($dbCon,$sql)){ 

$sql enthält das Ergebnis

$dbCon->query($add_query); 

Da diese Abfrage erfolgreich war ul, $sql enthält TRUE. mysqli_query() das zweite Argument erfordert eine Zeichenfolge zu sein, so wird TRUE"1", so dass Sie effektiv tun:

if (!mysqli_query($dbCon, "1")) { 

Das ist nicht eine gültige Abfrage ist, so dass Sie einen Fehler.

Ich denke, was Sie wirklich gemeint war, zu tun:

if (!$sql) { 
    die('Error: ' . $dbCon->error); 
} else { 
    echo "dados atualizados!"; 
} 

Sie brauchen nicht zu halten mysqli_query() Aufruf wiederholt

.

Sie sollten auch lernen, mit vorbereiteten Anweisungen zu programmieren, anstatt Variablen in die Abfrage einzufügen, um eine SQL-Injektion zu verhindern.

+0

Vielen Dank Barmar! Ich steckte fest und dachte über die Frage nach, nicht an das untenstehende! –

+0

Ich würde den Code etwas anders regeln, indem ich nur die Zeile ändere, die die Zuweisung zu '$ sql' ausführt, damit sie" ** '$ sql = $ add_query;' ** "liest. – spencer7593

+0

Das wäre falsch, denn dann wird 'mysqli_query()' zweimal im 'if' aufgerufen. – Barmar

Verwandte Themen