PHP meldet invalides SQL - phpMyAdmin führt es ohne Error aus

Hallo liebe Tutorials Community!
Ich habe nicht viel Erfahrung mit PHP, habe gerade mal das Quakenet Tutorial durchgemacht. Dann kam ich auf die Idee meine eigene "Blog Software" zuschreiben, mit dem was ich dort gelernt habe. Anschauen kann man das ganze bei blog.psoke.de .Ich habe das Problem, wenn ich Einträge in meinem Blog über das Webinterface lösche bleiben die dazugehörenden Kommentare als Karteileichen da. Ich habe jetzt eine Checkbox reingesetzt um die Kommentare mit zu löschen. Wenn man den "Löschen"-Button klickt, löscht er den Eintrag und falls die Checkbox gechecked ist, die Kommentare mit. (Sollte er jedenfalls). Das Formular beim "Submit" heißt "delete". Der Query wird dann je nach REQUEST_METHOD ausgewählt.

Das ist die "blog" Tabelle:
http://dl.dropbox.com/u/6274093/sql_blog.png
Das ist die "blog_comments" Tabelle:
http://dl.dropbox.com/u/6274093/sql_blog_comments.png

Der Code:
PHP:
if ('POST' == $_SERVER['REQUEST_METHOD']){
	if ($_POST['delete']){
		// Check auf die Checkbox
		if (isset($_POST['deleteComments'])){
			$query =
				'DELETE FROM
					blog
				WHERE
					blog.ID = "'.$_POST['ID'].'";
				DELETE FROM
					blog_comments
				WHERE
					blog_comments.entry_ID = "'.$_POST['ID'].'"';
		}
		else{
			$query =
				'DELETE FROM
					blog
				WHERE
					blog.ID = "'.$_POST['ID'].'"';
		}

		// Ausführen
		$check = $db->query($query);
		
		// Prüfen ob der Query ausgeführt wurde
		if (!$check){
			die('Der Query konnte nicht ausgefuhrt werden: '.$db->error);
		}
		
		// Meldung ausgeben
		echo "Eintrag wurde gelöscht!";
	}
	else if ($_POST['edit']){
		// Beitrag UPDATE Query
	}
	else {
		die('Falsches Formular');
	}
}
Ein Beitrag im HTML:
HTML:
<!-- ID: 8 -->

<div class="item">
	<h2>PHP</h2>
	POSTED ON <span class="date">2010-06-01 01:31:34</span><br>
	<input type="button" id="showformular_8" value="Bearbeiten" onClick="javascript:changevisible('editentry_8');changevalue('showformular_8','Bearbeiten')"> &mdash;
	<form action="editentries.php" method="post" style="display:inline;"><input type="hidden" name="ID" value="8"><input type="submit" name="delete" value="L&ouml;schen" class="delete-button"><input type="checkbox" name="deleteComments" checked>Kommentare mitl&ouml;schen </form>
	<form action="editentries.php" method="post" id="editentry_8" style="display:none;"><br>

		Kategorie: <select name="Category">
			<option value="new">Neue Kategorie anlegen...</option>
			<option selected value="Aktuelles">Jetzt: Aktuelles</option>
			<option value="Aktuelles">Aktuelles</option>
			<option value="Assassins Creed">Assassins Creed</option>
		</select> - Neu: <input type="text" name="newCategory"><br>

		Reihenfolge: <input type="text" name="Order" size="2" value="0"> (Muss bei 'Aktuelles' leer bleiben)<br><br>
		&Uuml;berschrift:<br><input type="text" name="Headline" size="50" value="PHP"><br><br>
		Inhalt:<br><textarea name="Content" rows="10" cols="50">
PHP ist eine tolle Serverseitige Programmiersprache!
		
		
		
		</textarea><br><br>
		<input type="hidden" name="ID" value="8">
		<input type="submit" name="edit" value="Fertig" class="verify-button"> <input type="reset" name="reset" value="Leeren">

	</form>
	<hr>
</div>
<!-- / ID: 8 -->
Wenn ich die Checkbox nicht checke, dann führt er den Query aus, löscht den Beitrag (aber natürlich die Kommentare nicht mit, soll ja auch so sein). Wenn ich nun aber die Checkbox checke, wirft er mir beim Parsen diesen Fehler aus:
Code:
Der Query konnte nicht ausgefuhrt werden:
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 
'DELETE FROM blog_comments WHERE blog_comments.entry_ID = "27"' at line 5
Wenn ich den Query aber in PhpMyAdmin kopiere, statt der Variablen bestehende IDs einsetze, klappt alles.
Code:
Ihr SQL-Befehl wurde erfolgreich ausgeführt.
DELETE FROM blog WHERE blog.ID = "28";# 1 Zeile(n) betroffen.
DELETE FROM blog_comments WHERE blog_comments.entry_ID = "28";# 1 Zeile(n) betroffen.
Das ganze ist mir ein Rätsel, ich hoffe ihr könnt mir helfen.
Vielen Dank im Vorraus!
 
Zuletzt bearbeitet:
PHP:
$query=
'DELETE FROM
   blog
WHERE
   blog.ID = "'.$_POST['ID'].'";
DELETE FROM
   blog_comments
WHERE
   blog_comments.entry_ID = "'.$_POST['ID'].'"';
Ich haltes es für ein Anführungszeichenproblem.. Benutz als Stringanführungszeichen die doppelten, ansonsten (im String und in der Variablen) die einfachen. Wobei das Problem eher das ist : Das Semikolon mittendrin ist abstrus. Zwei Queries in einem String?

mfg chmee
 
Stimmt, ich glaube PHP unterstützt mit mysql keine mehrfachen Queries, auch nicht per Semikolon, was eine extra Option im phpMyAdmin ist. Dafür kannst du mysqli nutzen.
 
Ihr seid echt super, Danke.
Ist halt nur blöd, weil ich sonst immer nur bei der verschiedenen Fällen verschiedene Queries gemacht hab. Die Execution blieb immer gleich.
Tja, muss ich mir wohl was anderes ausdenken
Danke nochmal
 
Das heißt ich kann das einfach ersetzen und es sollte noch alle standart funktionen unterstützen?
Wäre es besser auch alles andere noch gleich mit umzustellen

Edit: sorry, hab nochmal nachgeschaut, es ist alles schon mysqli.
Soll ich jetzt einfach ein multi_query davor setzten, also ich mein, stört es das multi_query, wenn garkein multi query kommt sondern "blos" ein single query?

Es funktiniert immernoch nicht so wie ich das will :(
connecttosql.php, die dann eingebunden wird:
PHP:
<?php
$db = @new MySQLi('localhost', 'xxxxx', 'xxx', 'xxxx');
if (mysqli_connect_errno()) {
    die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
}
?>
Und jetzt wieder das andere:
PHP:
if ($_POST['delete']){
		if (isset($_POST['deleteComments'])){
			$query =
				'DELETE FROM
					blog
				WHERE
					blog.ID = "'.$_POST['ID'].'";
				DELETE FROM
					blog_comments
				WHERE
					blog_comments.entry_ID = "'.$_POST['ID'].'"';
					
			// Ausführen
			$check = $db->multi_query($query);
				
			// Prüfen ob der Query ausgeführt wurde
			if (!$check){
				die('Der Query konnte nicht ausgefuhrt werden: '.$db->error);
			}
				
			// Meldung ausgeben
			alert('Eintrag wurde mitsammt der Kommentare gel&ouml;scht!');
		}
		else{
			$query =
				'DELETE FROM
					blog
				WHERE
					blog.ID = "'.$_POST['ID'].'"';
		
			// Ausführen
			$check = $db->query($query);
		
			// Prüfen ob der Query ausgeführt wurde
			if (!$check){
				die('Der Query konnte nicht ausgefuhrt werden: '.$db->error);
			}
		
			// Meldung ausgeben
			alert('Eintrag wurde gel&ouml;scht!');
		}
	}
 
Zuletzt bearbeitet:
Es funktiniert immernoch nicht so wie ich das will :(

Was genau funtioniert denn nicht(es sieht eigentlich gut aus, wie du es hast)

Bekommst du eine Fehlermeldung oder werden die gewünschten Datensätze nicht gelöscht?

<edit>
Hast du eine eigene Funktion alert() irgendwo zu stehen, oder bist du mit den Sprachen ein wenig durcheinander gekommen? :-)
Code:
// Meldung ausgeben
            alert('Eintrag wurde mitsammt der Kommentare gel&ouml;scht!');
</edit>
 
Setze mal an den Anfang deines Scriptes ein error_reporting(E_ALL); Das sollte alle (Nicht-Denk-)Fehler ausgeben.
 
Zurück