xtcommerce 3.04 auf mysqli umstellen

#1
ich kenne mich in html relativ gut aus, aber nicht in PHP und muß einen xtcommerce 3.04-Shop auf mysqli umstellen, weil der Provider in Zukunft PHP 5.2 nicht mehr unterstützt und PHP 5.5 und höher ganz offensichtlich mysqli verlangt. Einfach alle mysql in mysqli ändern bringt aber die Fehlermeldung:
Verbindung erfolgreich:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\inc\xtc_db_query.inc.php on line 31

Warning: mysqli_errno() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\inc\xtc_db_query.inc.php on line 31

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\inc\xtc_db_query.inc.php on line 31
-
Hier der Code von xtc_db_connect.inc.php
PHP:
//  include(DIR_WS_CLASSES.'/adodb/adodb.inc.php');
  function xtc_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
    global $$link;

    if (USE_PCONNECT == 'true') {
     $$link = mysqli_pconnect($server, $username, $password, $database);
    } else {
$$link = mysqli_connect($server, $username, $password, $database);
      }

    if ($$link) // mysqli_select_db($database)
{
echo 'Verbindung erfolgreich: ';

 }
else
{
die ('keine Verbindung möglich: ' . mysqli_error());
}
    return $$link;
  }
und hier von xtc_db_query.inc.php
PHP:
// include needed functions
  include_once(DIR_FS_INC . 'xtc_db_error.inc.php');
  $link = '$db_link';
  function xtc_db_query()
{
    global $$link;

    //echo $query.'<br>';

    if (STORE_DB_TRANSACTIONS == 'true') {
      error_log('QUERY ' . $query . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
    }
//    $queryStartTime = array_sum(explode(" ",microtime()));
    $result = mysqli_query($query, $$link) or xtc_db_error($query, mysqli_errno(), mysqli_error());
//   $queryEndTime = array_sum(explode(" ",microtime()));
//   $processTime = $queryEndTime - $queryStartTime;
//   echo 'time: '.$processTime.' Query: '.$query.'<br>';


    if (STORE_DB_TRANSACTIONS == 'true') {
       $result_error = mysqli_error();
       error_log('RESULT ' . $result . ' ' . $result_error . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
    }

    return $result;
  }
was ist falsch?
 

alxy

Erfahrenes Mitglied
#2
So einfach ist das auch nicht. Hast du mal darüber nachgedacht, die Shopsoftware an sich zu aktualisieren? Wie es aussieht, ist diese Version schon 8 Jahre alt.
 
#3
Das Problem: ich bin 73 und weiß nicht, wie lange ich den Shop noch betreiben werde. Ich hab zwar schon zu Beginn von html sozusagen zu Fuß ohne Hilfsprogramm meine Webseite (nicht den Shop) erstellt und erst später dann mit Frontpage weiter entwickelt, aber es fällt mir heute schwer (vielleicht wegen dem Alter) bei PHP auch noch mal von vorn anzufangen, zumal ich mit dem Shop, so wie er ist, sehr zufrieden bin. Aber 1&1 hält mir zwar noch gegen Gebühr PHP 5.2 bereit, nur weiß ich nicht, wie lange noch und dann wäre mysqli nicht zu umgehen. Gibt es keinen Weg, ohne sich in PHP zu vertiefen, das mysqli-Problem zu lösen ?
 

alxy

Erfahrenes Mitglied
#4
Nein, einfach wird es nicht. Man müsste mühsam den Code durchsehen und schauen, was genau wie angepasst werden müsste. Ich würde dir empfehlen (ja nachdem wieviele Produkte, und welche angeboten werden), dir mal die aktuellen Shopwares anzusehen, vielleicht auch die bereits gehosteten. Da musst du dich dann um nichts mehr kümmern, und nur noch die Produkte einpflegen (meist gegen eine kleine monatliche Gebühr). Die Themes kann man meist trotzdem noch mit HTML/CSS anpassen.

Übrigens ein weiteres Problem ist, dass neben mysql_* noch andere Sachen in PHP veraltet sind. Du weißt also garnicht, ob die Anwendung, selbst nachdem man das mysqli -Problem gelöst hat, es nicht noch weitere Inkompatibilitäten gibt (ich würde fast darauf wetten).
 

merzi86

Erfahrenes Mitglied
#6
Rein auf das Problem mit Mysql betrachtet:
xtcommerce scheint das ursprünglich das Datenbankframework Adodb zu nutzen.

Ein Hinweis findet man hier:
PHP:
include(DIR_WS_CLASSES.'/adodb/adodb.inc.php');
Dadurch würde es reichen eine aktualisierte Version von adodb einzuspielen (in den xtcommerce Ordner /adodb kopieren).

http://adodb.org/

Aber wie bereits alxy erwähnt hat garantiert das noch lange nicht, dass das Portal dann wieder richtig läuft, da sich in PHP teils sehr viel getan hat.
Besser kommst du wirklich, besonders da du nur wenige PHP kenntnisse besitzt, wenn du eine aktualisierte Version von xtcommerce einspielst.