PHP Komisches Problem mit mysql_real_escape_string()

sYnq

Lieutenant
Dabei seit
Mai 2010
Beiträge
558
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:

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.598
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.
Zitat von http://de3.php.net/manual/en/mysqli.real-escape-string.php:
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 )
 

Karol_

Lieutenant
Dabei seit
Juni 2009
Beiträge
574
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.
 

sYnq

Lieutenant
Ersteller dieses Themas
Dabei seit
Mai 2010
Beiträge
558
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 :-\
 

UltiSalamander

Lieutenant
Dabei seit
März 2010
Beiträge
536
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']);
 
Top