PHP Komisches Problem mit mysql_real_escape_string()

sYnq

Lieutenant
Registriert
Mai 2010
Beiträge
563
Hi,
ich möchte Lebensüberprüfungsfunktion für mein VB-Programm basteln. Alle X Minuten wird über den Webclient eine PHP-Seite aufgerufen, dazu eine Unique-ID übermittelt und das Datum bei dieser Unique-ID automatisch aktualisiert.

Klappt auch fast.

Sobald ich mysql_real_escape_string() einsetze, bekomme ich ein leeres Ergebnis zurück.

Code:
<?php
	// Melde alle PHP Fehler (siehe Changelog)
	error_reporting(E_ALL);
	
	$db = @new mysqli('XXX.XXX.XXX.XXX', 'XXX', 'XXX', 'XXX');
	$db->query("SET NAMES 'utf8'");


	if (mysqli_connect_errno()) {
    die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
	}

	$sql = "UPDATE fights SET date = now() WHERE id =" . mysql_real_escape_string($_GET['uniqueid']);

	echo $sql;
	
	$result = $db->query($sql);
?>

Echo gibt aus:
UPDATE fights SET date = now() WHERE id =

Ersetze ich nun den SQL-Code mit folgender Zeile, also ohne die mysql_real_escape_string()-Funktion, klappts.

$sql = "UPDATE fights SET date = now() WHERE id =" . $_GET['uniqueid'];

Ergebnis:
UPDATE fights SET date = now() WHERE id =2

Woran könnte das wohl liegen?

EDIT: magic_quotes_gpc ist auf "On" gestellt. Liegt das wohl daran? Muss ich dann überhaupt noch mysql_real_escape_string() verwenden?
 
Zuletzt bearbeitet:
Wie soll mysql_real_escape_string auch mit der MySQLi-Klasse funktionieren? Sieh dir mal die Doku an, dann wird es dir denk ich mal klar sein.
http://de3.php.net/manual/en/mysqli.real-escape-string.php schrieb:
Object oriented style
string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )

Procedural style
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
 
Yuuri hat ja schon die Lösung gepostet. Dein Fehler tritt auf, weil du eine Datenbankverbindung via mysqli aufbaust.

Die Funktionen mysql_real_escape_string() und mysqli_real_escape_string() benötigen zur korrekten Funktion nämlich eine existierende Datenbankverbindung (mysql- und mysqli-Funktionen sind nicht untereinander kompatibel). Wenn diese Verbindung nicht existiert, dann wird normalerweise eine Standard-Verbindung aufgebaut. Das kann aber nur dann klappen, wenn diese standardmäßig verwendeten Daten auch in der php.ini festgelegt wurden (mySQL-Server, Username & Passwort). Nach Modifikation der PHP-Einstellungen würde dein Code funktionieren, allerdings würde das PHP-Script auch zwei Verbindungen zur Datenbank aufbauen.

Die wesentlich bessere Alternative ist daher, dass du die zu deiner mysql-Verbindung passende Funktion verwendest.
 
Dankeschön. Bin noch Anfänger was OOP angeht.
Welches davon muss ich denn nun nehmen? Bei mysqli_real_escape_string($_GET['uniqueid']) bekomme ich den gleichen Fehler wie oben.

Bei escape_string($_GET['uniqueid']) und real_escape_string($_GET['uniqueid']) habe ich nur eine weiße Seite.

Sorry für die doofe Frage :-\
 
sYnq schrieb:
Dankeschön. Bin noch Anfänger was OOP angeht.
Welches davon muss ich denn nun nehmen? Bei mysqli_real_escape_string($_GET['uniqueid']) bekomme ich den gleichen Fehler wie oben.

Bei escape_string($_GET['uniqueid']) und real_escape_string($_GET['uniqueid']) habe ich nur eine weiße Seite.

Sorry für die doofe Frage :-\
mysqli_real_escape_string nimmt als ersten Parameter deine mysqli Verbindung. Siehe dazu: http://www.php.net/manual/de/mysqli.real-escape-string.php
Demnach müsste es bei dir heißen:
Code:
mysqli_real_escape_string($db, $_GET['uniqueid']);
// bzw.
$db::real_escape_string($_GET['uniqueid']);
 
Zurück
Oben