Fehler: Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax in der Nähe '
Den code unten verwendet wird, wenn der Benutzer ein youtube-url, der es Holen Sie sich die youtube-id aus der url. Sie erhalten dann den Titel für das video mit id. Das ist dann eingefügt in eine Datenbank abgerufen und zur Anzeige des Bilds des Videos im Zusammenhang mit dieser id.
wenn ich dieses youtube-url http://www.youtube.com/watch?v=p64tAbP-nHE oder und andere youtube-url. Wenn der Titel, die youtube-url enthält ein 'ie(2013 Ravens Rock Rally - Jonathan O' Callaghan & Gavin Sheehan - Stufe 3) bekomme ich die Fehlermeldung
Fehler: Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax in der Nähe 'Callaghan & Gavin Sheehan - Stufe 3" in Zeile 1
Jede Hilfe wäre toll, danke im Voraus.
Hier ist mein code:
<?php
include 'dataconnection.php';
//Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
$url = $_POST['set_video'];
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
$youtube_id = $my_array_of_vars['v'];
$info = $_POST['set_desc'];
$id = $my_array_of_vars['v'];
$xmlData = simplexml_load_string(file_get_contents("http://gdata.youtube.com/feeds/api/videos/{$id}?fields=title"));
$title = (string)$xmlData->title;
$sql="INSERT INTO videodetails SET id='null',youtube_id='$youtube_id',info='$title'";
if (!mysqli_query($connection,$sql))
{
die('Error: ' . mysqli_error($connection));
}
echo "<div id='pageheader'>
1 record added<span id='logout'>Return to <a href='contributors_login.html'>Contributors Login</a></span>
</div>";
echo '<div id="setvideo"><a href="http://www.youtube.com/watch?v='.$my_array_of_vars['v'].'" target="_blank"><img src="http://i4.ytimg.com/vi/'.$my_array_of_vars['v'].'/default.jpg" style="border:solid 2px white;"></a><p>'.$title.'</p></div>';
mysqli_close($connection);
?>
- Sie brauchen dazu einige der Flucht
- Sie finden es möglicherweise hilfreich, um den Inhalt Ihrer $sql-variable.
- vergessen Sie nicht zu akzeptieren (ankreuzen) die Antwort, die Sie gefunden, die meisten nützlich. Fühlen Sie sich frei, um +1 alle anderen, die Sie wie auch, es ist eine gute Art der Belohnung Antworten!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre yourTube name ist ein Zitat, deshalb die SQL-Zeile
wird diese
dem MySQL sieht wie
und MySQL nicht versteht Callaghan & Gavin Sheehan - Stufe 3'
SET
ist keine gültige syntax, die für dieINSERT
- Anweisung. Edit: OK, anscheinend MySQL unterstützt es! Ich werde Essen mein Hut.SET
imINSERT
Aussagen, auch wenn dieses nicht SQL-standard und muß nicht zwangsläufig in anderen RDBMS. Vgl. dev.mysql.com/doc/refman/5.6/en/insert.htmlVerwenden
mysqli_real_escape_string
in IhremINSERT INTO ...
Teil.Öffnen Sie einfache Anführungszeichen. Aber der Titel enthält auch die einfachen Anführungszeichen, so werden Sie geschlossen. MySQL weiß das nicht und denkt, dass der text, der folgt, ist ein MySQL-Schlüsselwort.
mysqli_*
nichtmysql_*
es wäre besser,mysqli_real_escape_string()
$sql="INSERT INTO videodetails SET id='null',youtube_id='".mysqli_real_escape_string($youtube_id)."',info='".mysqli_real_escape_string($title)."'";
Fall von Zeichenfolgen, die Anführungszeichen enthalten ist, warum mysqli_real_escape_string() vorhanden ist, finden die Anführungszeichen ein, und legen Sie eine
\
bevor Sie, damit Sie zählen als wörtliche Zitat-Zeichen, statt der Kündigung die Zeichenfolge in Anführungszeichen.Aber die beste Praxis ist die Verwendung von query-Parametern, so dass Sie nicht brauchen, um über diese eingebetteten Zitate. An jedem Ort müssen Sie eine variable im SQL-string anstelle von literal-Wert, verwenden Sie eine query-parameter-Platzhalter. Diese Platzhalter funktionieren nicht an Stelle von Tabellennamen, Spaltennamen oder SQL-Ausdrücke oder Schlüsselwörter-Sie funktionieren nur, wo Sie normalerweise legen Sie ein einzelnen skalaren Wert in Ihrer SQL.
Dies ist sicherer und macht Ihre SQL mehr lesbar. Beachten Sie, dass die
?
Platzhalter selbst nicht gehen, in Anführungszeichen, auch wenn der Wert, den Sie zu binden, ist ein string.PS: ich Frage Ihre Nutzung der Zeichenfolge in Anführungszeichen
'null'
wo Sie kann bedeuten, dass der SQL-SchlüsselwortNULL
.Ihre insert-Abfrage ist nicht gültig sql. Das Schlüsselwort "set" wird verwendet mit update-Abfragen. Insert-queries wie folgt Aussehen:
oder diese
INSERT ... SET
ist gültig mysql-syntax. siehe 2. Beispiel dev.mysql.com/doc/refman/5.5/en/insert.html... Jonathan O'Callaghan ...
also, auch wenn Sie ändern Sie die syntax der Abfrage immer noch nicht.