mysqli_query Eingänge über variable
Ich versuche, die Informationen in einer MySQL-Tabelle mithilfe des folgenden PHP-code. (Die Eingabe der Namen und text aus einer HTML5-basic-form.) Vermutlich ein syntax-Problem?
<?php
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable)
//inputs
$name = $_GET["name"];
$text = $_GET["text"];
$sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("$name", "$text", CURRENT_TIMESTAMP);'; //the query. I'm pretty sure that the problem is a syntax one, and is here somewhere.
mysqli_query($mysqli,$sqlqr); //function where the magic happens.
?>
Wird kein Fehler geworfen. Ein leerer Bildschirm Ergebnisse, und eine Zeile mit "$name" und "$text" Hinzugefügt wird, um die MySQL-Tabelle.
- Warnung! Dein code ist gefährlich anfällig für SQL-injection-Angriffe. Lesen Sie, wie zu entkommen, Ihre SQL-Variablen, vorzugsweise mit Prepared Statements.
- Basierend auf den geposteten code, eine Zeile eingefügt und ein leerer Bildschirm ist genau das, was ich erwarten würde.
- Was bedeutet mysqli_error() zurück?
- Ja,aber es ist der name der variable (wörtlich $name) Hinzugefügt, und nicht sein Wert.
- mysqli_error() nichts zurückgibt (vorausgesetzt, ich bin mit korrekt).
- sorry, ich lese zu schnell und nicht erkennen, die Sie gedacht, "die buchstäblich $name". Hoffe, dass ich nicht kommen off als snarky; das war definitiv nicht meine Absicht. Die einzigen Angebote die Sie haben, um Ihre Abfrage-string sind Teil des Problems: Sie will nicht ersetzen die Werte der Variablen als Uby und andere darauf hin. Erhalten Sie buchstäblich
$name
statt der-Wert-von-Namen. Dieses gegenstandslos, wenn Sie verwenden, mysqli prepared statements, also einen Versuch bei denen. Sie sind nicht so beängstigend wie Sie klingen, Sie sind viel sicherer, und es gibt viele schöne tutorials auf, wie Sie zu verwenden sind. - Überprüfen Sie meine überarbeitete Antwort. Sollten keine Fehler auftreten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie Ihr code Aussehen sollte (mit zusätzlichen SQL-Injection-Schutz):
Werfen Sie einen Blick auf das, was ich getan habe. Erstens hab ich entkam der Benutzereingaben sind Sie abrufen in der
$name
und$text
Variablen (das ist so ziemlich ein muss für die Sicherheit Gründen) und andere haben vorgeschlagen, sollten Sie vorzugsweise mit prepared statements.Das problem ist, dass du nicht die umliegenden string-Werte mit einfachen Anführungszeichen ('), die eine Anforderung von der SQL-syntax.
Ich hoffe, das hilft, Ihre Frage zu beantworten.
mysqli_real_escape_string()
nimmt zwei Parameter: die Zeichenfolge zu entkommen und auch die $link-variable. php.net/manual/en/mysqli.real-escape-string.phpZunächst: Sie sollten mysqli prepared statements zur Vermeidung von SQL-injection-Angriffe. Es ist nicht sicher zur Verwendung von Benutzer-Eingaben in eine Abfrage ohne die richtige Flucht. Prepared statements sind nützlich, um dies zu verhindern.
Zweiten: Sie sollten lernen, wie string-quoting funktioniert in PHP, single-quoted strings und double quoted strings sind Verschieden
Ich würde empfehlen, das Lesen der In der PHP-Dokumentation über die string-quoting.
Halten Sie Ihre vars außerhalb der Anführungszeichen.