MySQL CLient API

DrRamazzotti

New Member
Hallo,

ich stelle mich wohl zuungeschickt an. WIe bekomme ich es hin, dass ich die aktuellere Client API verwende. Aktuell bekomme ich den Hinweis:
######################################
Die Version der verwendeten PHP MySQL Bibliothek 4.1.15 unterscheidet sich von der Version des MySQL Servers 5.0.32. Dies kann zu unerwartetem Verhalten führen.
######################################
Wobei doch eine 5'er vorhanden sein sollte...
Code:
root@:~# dpkg -l | grep mysql
ii libdbd-mysql-p 2.9006-1 A Perl5 database interface to the MySQL data
ii libmysqlclient 3.23.56-3 LGPL-licensed client library for MySQL datab
ii libmysqlclient 4.0.24-10sarge mysql database client library
ii libmysqlclient 4.0.24-10sarge mysql database development files
ii libmysqlclient 4.1.15-0.dotde mysql database client library
ii libmysqlclient 5.0.51-2.dotde MySQL database client library
ii mysql-admin 1.0.20-1 GUI tool for intuitive MySQL administration
ii mysql-admin-co 1.0.20-1 Architecture independent files for MySQL Adm
ii mysql-client 5.0.51-2.dotde MySQL database client (meta package dependin
ii mysql-client-5 5.0.45-0.dotde MySQL database client binaries
ii mysql-common 5.0.51-2.dotde MySQL database common files
rc mysql-common-4 4.1.11a-4sarge mysql database common files (e.g. /etc/mysql
ii mysql-server 5.0.32-7etch1 mysql database server (meta package dependin
ii mysql-server-4 5.0.32-7etch1 mysql database server (transitional package)
ii mysql-server-5 5.0.32-7etch1 mysql database server binaries
ii php-mysql 5.1.6-3 A module for PHP applications that use MySQL
rc php4-mysql 4.4.7-0.dotdeb MySQL module for php4
ii php5-mysql 5.2.6-0.dotdeb MySQL module for php5
rc webmin-mysql 0.94-7woody3 mysql-server control module for webmin
root@:~#
Besten Dank und Gruesse
Bernhard
 
Last edited by a moderator:
Hallo Thorsten,

das ist eine gute Frage. Ich glaube mich erinnern zu koennen, dass er damals beim update etwas gezickt hatte, aber es nie weitere Probleme gab. Die 4'er Version kann von mir aus weg. Wenn mir jemand hilft, beim wie ;-)
 
WIe bekomme ich es hin, dass ich die aktuellere Client API verwende.
Indem du PHP (bzw. mindestens dessen MySQL Erweiterung) neu kompilierst und nicht die mitgelieferte Client-Bibliothek nutzt, sondern eine aktuelle externe MySQL-Client-Bibliothek.

Aber was bringt es dir? Welches Feature benötigst du konkret, welches dir lediglich die aktuelle MySQL-Client-Bibliothek bietet? Dem MySQL-Server ist das egal, der kann auch mit älteren Versionen des Protokolls umgehen.
 
Hallo Roger,
vielen Dank fuer Deine Antwort.
Ich moechte die CLient-API aus folgendem Grund aktualiseren:
Ich habe auf dem Server eine Stored Procedure (SP). Diese SP gibt bei einer bestimmten Parametrisierung einen Wert zurueck. Aktuell die Anzahl von Datensaetzen, die mit
Code:
SELECT COUNT(*) AS anzahl FROM tabelle
ermittelt werden.
Fuehre ich die SP aus auf dem Server direkt oder mit z.B. dem MySQL-Manager von EMS erhalte ich die korrekte Anzahl dargestellt. z.B. 319.
Fuehre ich die Abfrage aus PHP ueber mysqli aus erhalte ich seltsame Resultate z.B. fuer die gleiche Abfrage "8246126576403036465" als Ergebnis.

Deswegen vermute ich, dass dort die altere API nicht mit dem Ergebnis der SP zurechtkommt. Wobei bei alle anderen Ergebnisse korrekt sind.

Danke und Gruss
Bernhard
 
Update

Hallo,

habe jetzt noch einige Versuche gemacht und google "gequaelt" und nun doch eine Loesung OHNE Update der Client-API gefunden:

Bisher hatt ich die folgende Funktion ohne Probleme verwendet:
PHP:
	function querySP($SQLQuery, $params){
		$db = new mysqli_Extended($this->host, $this->user, $this->pswd, $this->dbname);
		// Hier muss eine Pruefung auf einen NICHT-Connect erfolgen
		switch(sizeof($params)){
			case 0:
				$parameter="";
			break;
			case 1:
				$parameter = "?";
			break;
			default:
				$parameter="?".str_repeat(',?', sizeof($params)-1);			
		}

		$Query="CALL ".$SQLQuery."(".$parameter.")";
		if ($stmt = $db->prepare($Query)) {

    		/* bind parameters for markers */
    		//$stmt->bind_param('s', $test);
			//$test = 345;
			
			foreach ($params as &$param); // hier gibt es nichts auszuführen
			array_unshift($params, str_repeat('s', count($params)));
			if (!call_user_func_array(array($stmt, 'bind_param'), $params));

    		/* execute query */
    		$stmt->execute();			
			$stmt->store_result();
			if($stmt->num_rows > 0){
				while ($row = $stmt->fetch_assoc()) {
				    $foo[] = $row;
				}
			} else {
				$foo=false;
			}
			//$row = $stmt->fetch_assoc();
    		$stmt->close();
		}

		// Verbindung zum Datenbankserver beenden
		$db->Close();	
		return $foo;
	}

Diese Funktion verursachte aber jetzt die Probleme.

Mit dieser Funktion klappt die Abfrage einwandfrei und liefert mir auch die richtigen Ergebnisse:

PHP:
$mysqli = new mysqli("localhost","dbuser","password","database");

/* check connection */
if (mysqli_connect_errno()) {
    printf("<br />Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Call my stored procedure the first time */
echo("<pre>");
if ($mysqli->multi_query("CALL sp_overview('%d','%d','%d','1','all','1','1','0','0');")) {
    do {
        /* store first result set */
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_array()) {
            	print_r($row);
                //printf("%s\n", $row[0]);
            }
            $result->close();
        }
        /* print divider */
        if ($mysqli->more_results()) {
            printf("-----------------\n");
        }
    } while ($mysqli->next_result());
}
else {
    printf("<br />First Error: %s\n", $mysqli->error);
}

Somit hat sich Anfrage erstmal erledigt.

Wer sich aber berufen fuehlt mir noch ein wenig Kenntnisse ueber die Einbindung der "richtigen" Client-API-Version zu vermitteln ist herzlich eingeladen.

Gruesse
Bernhard

p.s: Thorsten, ich hoffe, die Formatierungen sind jetzt so in Ordnung...
 
Back
Top