2016-12-06 3 views
0

Ich versuche, die INSERT INTO SQL-Anweisung in PHP zu verwenden. Es wird alles bis zum letzten Wert ($bands_bio) korrekt eingegeben. Anstatt die richtigen Informationen einzugeben, bleibt der Wert leer. Ich habe über alles nachgedacht und finde keine Syntaxfehler.INSERT INTO-Anweisung wird nicht korrekt einen bestimmten Wert einfügen?

$page_title = "Create a new band"; 

require ('includes/database.php'); 
require_once 'includes/bandsHeader.php'; 

$band_name = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_name', FILTER_SANITIZE_STRING))); 
$band_photo = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_photo', FILTER_SANITIZE_STRING))); 
$genre = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'genre', FILTER_SANITIZE_STRING))); 
$band_bio = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_bio', FILTER_SANITIZE_STRING))); 

echo $band_bio; 

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/searchFooter.php'; 
    exit; 
} 

$albums = 0; 

$sql = "INSERT INTO bands VALUES (NULL, '$band_name', '$genre', '$albums', '$band_bio')"; 

$query = @$conn->query($sql); 

if (!$query) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/footer.php'; 
    exit; 
} 

Wie Sie sehen können, wiederholte ich $band_bio, um zu sehen, ob es war den richtigen Wert von meiner Form erhalten, die die GET-Methode verwendet, die es das ist nicht das Problem so. Es hat kein Problem, alles bis zum letzten Wert korrekt einzufügen, der die letzte Spalte namens band_bio in meiner bands Tabelle in meiner Datenbank sein soll. Es werden auch keine Fehler ausgegeben. Es ist fast so, als würde man die String-Daten von der Variablen nehmen und den gesamten Text entfernen, bevor die Information eingefügt wird.

Ich arbeite seit ein paar Wochen auf dieser Website und habe die INSERT INTO-Anweisung genau so auf anderen Seiten verwendet und es funktioniert gut. Das ist das erste, was mich wirklich überrascht hat und ich kann es nicht herausfinden. Jede Hilfe wird geschätzt.

+0

Was ist das ddl (Schema) für Ihre 'bands' Tabelle? – eggmatters

+0

Was eggmatters sagte + Beispiel Werte, die Sie einfügen, wenn möglich :) – vuryss

+0

Könnte es sein: '$ bands_bio =" ''); DELETE von Bändern, wo wahr '"'? – eggmatters

Antwort

2

Achten Sie beim Einfügen darauf, dass das Feld pk (id) auf auto-increment gesetzt ist. Auf diese Weise können Sie mehr Kontrolle über Ihre Abfragen ausüben. Sie sollten noch erfolgreicher sein mit:

$sql = "INSERT INTO bands " 
. "(`band_name`,`genre`,`numof_albums`,`band_bio`) " 
. "VALUES ('$band_name', '$genre', '$albums', '$band_bio')"; 

von nicht pk Feld anzugeben, wird INNODB automatisch erhöht und es für Sie ein.

Die Idee ist, dass Sie angeben möchten, in welche Spalten eingefügt werden. Es ist in Ordnung, sich auf die Spaltenreihenfolge von mysql zu verlassen, aber in Ihrem Fall könnte etwas im Spiel sein.

Es sollte keinen Grund geben, warum band_bio "ausgelassen" würde. Sie würden einen Spaltenkonfliktfehler erhalten.

+0

Ja, ich habe den Primärschlüssel so eingestellt, dass er automatisch inkrementiert wird. Meine ganze Website würde brechen, wenn das nicht der Fall wäre, da sie stark auf dem Primärschlüssel und der Fremdschlüsselassoziation durch band_id beruht ... auch habe ich versehentlich versehentlich ein altes Schema eingefügt. Der richtige wurde bearbeitet. – Lefty

+0

Ich habe meine Antwort bearbeitet. Hatten Sie mit der Anfrage von oben Erfolg? – eggmatters

+0

Ich habe versucht, mit Ihrer Abfrage und es gab diesen Fehler zurück: Einfügen fehlgeschlagen mit: (1064) Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, damit die richtige Syntax in der Nähe von '0' in Zeile 1 verwendet wird. – Lefty

0

Total gefunden die Antwort selbst! Es war tatsächlich ein Syntaxfehler.

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) 

Die Variable $band_bio wurde in der if-Anweisung auf eine leere Zeichenkette zugewiesen wird, da ich einen Zuweisungsoperator anstatt einen Vergleichsoperator aus Versehen verwendet. Der korrekte Code müsste also $band_bio === "" anstatt $band_bio = "" sein.

Ich schwöre, das Problem ist immer etwas so viel einfacher als Sie denken, dass es sein wird.

Verwandte Themen