2014-05-12 1 views
0

Nous avons un projet étrange qui DOIT interagir avec une base de données MSAccess sur une machine Linux. Après avoir lu différents blogs, nous avons pu faire quelques lectures sur des tables existantes, mais, si nous essayons de faire une insertion ou des requêtes spéciales, cela échoue avec un message de connexion relancé.Problèmes avec la base de données d'accès dans linux

Je vais essayer d'expliquer tout ce que nous avons essayé. Tout d'abord, nous avons mis à niveau notre système vers la dernière version de LAMP car il semble y avoir eu quelques problèmes avec les bibliothèques odbc.

Ensuite, nous avons ajouté la connexion PDO comme décrit ici. https: //gist.github.com/amirkdv/9672857

nano /etc/odbcinst.ini sudo

[MDBTools] 
Description = MDBTools Driver 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1 
FileUsage = 1 
UsageCount = 2 

Après cela, nous avons redémarré apache, et il semble que les requêtes SELECT fonctionnent correctement.

Nous avons utilisé les exemples suivants avec quelques petites modifications. http://coursesweb.net/php-mysql/pdo-select-query-fetch

Notre base de données ont un test d'appel de table avec les informations suivantes:

CREATE TABLE `test` (
    `Id` INTEGER NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50), 
    `surname` VARCHAR(50), 
    `count` INTEGER 
) ENGINE=myisam DEFAULT CHARSET=utf8; 

SET autocommit=1; 

INSERT INTO `test`() VALUES (1, 'john', 'smith', 100); 
INSERT INTO `test`() VALUES (2, 'Mary', 'simmons', 200); 
INSERT INTO `test`() VALUES (3, 'Jane', 'Black', 300); 

Si je lance le fichier php suivant

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Ejemplo de ODBC</title> 

<body> 

<?php 
$mdb_file="/var/www/Temp/Example.mdb"; 

$uname = explode(" ",php_uname()); 
$os = $uname[0]; 

switch ($os){ 
    case 'Windows': 
    $driver = '{Microsoft Access Driver (*.mdb)}'; 
    break; 
    case 'Linux': 
    $driver = 'MDBTools'; 
    break; 
    default: 
    exit("Don't know about this OS"); 
} 

try{ 
$connect_string = "Driver={$driver};DBQ={$mdb_file};"; 
$dataSourceName = "odbc:" . $connect_string; 
$connection = new PDO($dataSourceName); 

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$query = 'SELECT id, name, surname FROM test'; 
$result = $connection->query($query); 

    // If the SQL query is succesfully performed ($result not false) 
    if($result !== false) { 
    // Parse the result set 
    foreach($result as $row) { 
     print_r ("<br>"); 
     print_r ($row); 
    } 
    } 
$connection = null; 

} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
    die(); 
} catch (Exception $e) { 
    echo "Exception: <br>".$e->getMessage(); 
    die(); 
} 

?> 

</body> 
</html> 

En conséquence, nous obtenons les lignes suivantes:

Array ([id] => 1 [0] => 1 [count] => 100 [1] => 100 [name] => john [2] => john [surname] => smith [3] => smith) 
Array ([id] => 2 [0] => 2 [count] => 200 [1] => 200 [name] => Mary [2] => Mary [surname] => simmons [3] => simmons) 
Array ([id] => 3 [0] => 3 [count] => 300 [1] => 300 [name] => Jane [2] => Jane [surname] => Black [3] => Black) 

Ainsi, le choix semble fonctionner.

Maintenant, si je tente un insert facile

$query = 'insert into test (id, count) values (4,400)'; 
$result = $connection->query($query); 

Je reçois un message de connexion de réinitialisation:

La conexión al servidor fue reiniciada mientras la página se cargaba. 

El sitio podría estar no disponible temporalmente o demasiado ocupado. Vuelva a intentarlo en unos momentos. 
Si no puede cargar ninguna página, compruebe la conexión de red de su equipo. 
Si su equipo o red están protegidos por un cortafuegos o proxy, asegúrese de que Firefox tiene permiso para acceder a la web. 

J'ai ajouté debug sur php

http: //jrs-s.net/2012/05/24/enabling-core-dumps-on-apache2-2-on-debian/ 

sudo apt-get install apache2-dbg libapr1-dbg libaprutil1-dbg 

sudo nano /etc/apache2/apache2.conf 
CoreDumpDirectory /tmp/apache2-dumps 

mkdir /tmp/apache2-dumps ; 
chmod 777 /tmp/apache2-dumps 

sudo /etc/init.d/apache2 restart 

Et après le lancement mon fichier php je vois que sur le dossier dump j'ai un nouveau fichier core.

J'exec sudo gdb apache2/tmp/apache2-dumps/base

et quand je reçois le prompt (gdb) I exec "bt" commande obtenir les informations suivantes:

#0 0x00007ff38c49c3b1 in vfprintf() from /lib/x86_64-linux-gnu/libc.so.6 
#1 0x00007ff38c55a344 in __vsprintf_chk() from /lib/x86_64-linux-gnu/libc.so.6 
#2 0x00007ff37cbf538f in mdb_sql_error() from /usr/lib/x86_64-linux-gnu/libmdbsql.so.2 
#3 0x00007ff37cbf6cbb in ??() from /usr/lib/x86_64-linux-gnu/libmdbsql.so.2 
#4 0x00007ff37cbf6691 in mdb_sql_run_query() from /usr/lib/x86_64-linux-gnu/libmdbsql.so.2 
#5 0x00007ff37d012640 in ??() from /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1 
#6 0x00007ff37c4e3c4a in ??() from /usr/lib/x86_64-linux-gnu/libodbccr.so.1 
#7 0x00007ff37ecc3d70 in SQLExecute() from /usr/lib/x86_64-linux-gnu/libodbc.so.1 
#8 0x00007ff37e69923c in odbc_stmt_execute (stmt=0x7ff38d203338) at /build/buildd/php5-5.5.12+dfsg/ext/pdo_odbc/odbc_stmt.c:173 
#9 0x00007ff3861ff59c in zim_PDO_query (ht=1, return_value=0x7ff38d203280, return_value_ptr=0x0, this_ptr=0x7ff38d202dd0, return_value_used=1) at /build/buildd/php5-5.5.12+dfsg/ext/pdo/pdo_dbh.c:1134 
#10 0x00007ff389201819 in dtrace_execute_internal (execute_data_ptr=<optimized out>, fci=<optimized out>, return_value_used=<optimized out>) at /build/buildd/php5-5.5.12+dfsg/Zend/zend_dtrace.c:97 
#11 0x00007ff3892bc15e in zend_do_fcall_common_helper_SPEC (execute_data=0x7ff38d1cf0c0) at /build/buildd/php5-5.5.12+dfsg/Zend/zend_vm_execute.h:552 
#12 0x00007ff3892809c8 in execute_ex (execute_data=0x7ff38d1cf0c0) at /build/buildd/php5-5.5.12+dfsg/Zend/zend_vm_execute.h:363 
#13 0x00007ff389201706 in dtrace_execute_ex (execute_data=0x7ff38d1cf0c0) at /build/buildd/php5-5.5.12+dfsg/Zend/zend_dtrace.c:73 
#14 0x00007ff389213243 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /build/buildd/php5-5.5.12+dfsg/Zend/zend.c:1316 
#15 0x00007ff3891b0f1c in php_execute_script (primary_file=0x7fff3030a700) at /build/buildd/php5-5.5.12+dfsg/main/main.c:2506 
#16 0x00007ff3892bf6dd in php_handler (r=0x7ff38d15d0a0) at /build/buildd/php5-5.5.12+dfsg/sapi/apache2handler/sapi_apache2.c:667 
#17 0x00007ff38d341008 in ap_run_handler (r=0x7ff38d15d0a0) at config.c:170 
#18 0x00007ff38d3415fe in ap_invoke_handler (r=0x7ff38d15d0a0) at config.c:439 
#19 0x00007ff38d357e3a in ap_process_async_request (r=0x7ff38d15d0a0) at http_request.c:317 
#20 0x00007ff38d357f9f in ap_process_request (r=0x7ff38d15d0a0) at http_request.c:363 
#21 0x00007ff38d3544a5 in ap_process_http_sync_connection (c=0x7ff38d165290) at http_core.c:190 
#22 ap_process_http_connection (c=0x7ff38d165290) at http_core.c:231 
#23 0x00007ff38d34ac48 in ap_run_process_connection (c=0x7ff38d165290) at connection.c:41 
#24 0x00007ff389b8a633 in child_main (child_num_arg=<optimized out>) at prefork.c:704 
#25 0x00007ff389b8a88c in make_child (s=0x7ff38d2adde0, slot=9) at prefork.c:800 
#26 0x00007ff389b8b867 in perform_idle_server_maintenance (p=<optimized out>) at prefork.c:902 
#27 prefork_run (_pconf=<optimized out>, plog=<optimized out>, s=<optimized out>) at prefork.c:1090 
#28 0x00007ff38d325ed6 in ap_run_mpm (pconf=0x7ff38d2db028, plog=0x7ff38d2a9028, s=0x7ff38d2adde0) at mpm_common.c:98 
#29 0x00007ff38d31f448 in main (argc=3, argv=0x7fff3030ae18) at main.c:777 

Mais Je ne sais pas comment continuer.

Pourriez-vous m'aider?

+0

J'ai regardé quelques forums et peut-être que le problème de mdb_sql_error est un problème de version. J'utilise PHP Version 5.5.12-1 + deb.sury.org ~ précis + 1, Système Linux 3.2.0-60-générique # 91-Ubuntu x86_64. Apache/2.4.9 (Ubuntu). Pilote PDO pour MySQL version 5.5.37 – David

+0

Peut-être que c'est mon problème, mais toujours pas la solution https://lists.ubuntu.com/archives/ubuntu-server-bugs/2013-October/101840.html – David

+0

It semble qu'il y avait un bug sur mdb_sql, donc j'ai besoin de trop le mettre à jour. [link] https://bugs.launchpad.net/ubuntu/+source/mdbtools/+bug/1227033 [link] – David

Répondre

0

David, salut

Cela fait un moment que je l'ai fait l'importation DB d'accès dans mysql et, malheureusement, je ne pas avoir accès à ce système plus.Mais dans la mesure où je me souviens de la plupart de nos problèmes étranges où résolu en passant les paramètres de langue sous forme utf-8 à iso-8859-1 dans la configuration du serveur.

Peut-être que c'est un point dans la bonne direction?

+0

Merci pour votre réponse metaphor_set, mais à la fin, comme nous avions aussi besoin d'écrire dans l'accès, nous avons décidé pour utiliser http://jackcess.sourceforge.net/. Il a plusieurs exemples et c'est vraiment facile à utiliser. Quoi qu'il en soit, peut-être que certains dans le futur peuvent essayer de changer les paramètres de langue. – David

Questions connexes