2017-10-20 31 views
0

J'ai une base de données MS Access. Je veux obtenir des enregistrements, puis écrire dans un tableau à deux dimensions. Je peux mais je pense que la zone de mémoire de jeu d'enregistrements et la zone de mémoire de tableau même. Parce que si je ferme le jeu d'enregistrements, je ne peux pas accéder aux valeurs de tableaux.Jeu d'enregistrements ADO MS Access et tableau à deux dimensions

Error: Catchable fatal error: Object of class variant could not be converted to string in ...

$databaselocation = $_SERVER['DOCUMENT_ROOT'] . "ornek.mdb"; 
$conn = new COM('ADODB.Connection') or exit('Cannot start ADO.'); 
$conn->Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=$databaselocation"); 

$SQL1 = "SELECT * from konu"; 
$rs = new com("ADODB.RecordSet") or die("Recordset cant create!"); 
$rs->Open($SQL1,$conn,1,3); 
$say = $rs->RecordCount(); 
echo "Row Counts: " . $say . "<br><br>"; 

$dizi = array(array()); 


for($a=0; $a<$say; $a++) 
{ 
    $dizi[$a][0] = $rs[0]; 
    $dizi[$a][1] = $rs[1]; 
    $rs->MoveNext; 
} 

$rs->Close(); $conn->Close(); 
$rs = null; $conn = null; 

echo $dizi[0][0];  // this line ERROR same below 

for($a=0; $a<$say; $a++) 
{ 
    echo $dizi[$a][0] . " - " . $dizi[$a][1] . "<br>"; // ERROR 
} 
+0

Pouvez-vous afficher/imprimer des données $ dizi. print_r ($ dizi); –

+0

En effet, '$ dizi' est-il vide ou non? Exécutez 'var_dump ($ dizi)'. Curieux, n'avez-vous pas [PDO-ODBC] (http://php.net/manual/en/ref.pdo-odbc.php) pour vous connecter à MS Access avec une API PHP plutôt qu'une interface COM? – Parfait

Répondre

0

En $rs vous n'avez pas valeur de chaîne, mais objet spécial COM. Habituellement, il est automatiquement converti en string. Dans ce cas, dans n'importe quelle cellule, vous avez une valeur étrange, par exemple une formule.

Essayez variant_get_type() et Constants list et vérifiez $rs[0], $rs[1] avant utilisation.

Et si je me souviens, vous devriez utiliser $rs->fields[0]property. (Oui, vous utilisez cette méthode)

+0

merci pour votre réponse. J'ai résolu. J'ai des données de chaîne dans la base de données, mais pas automatiquement converti en chaîne. je lance l'objet variant en chaîne. $ dizi [$ a] [0] = (chaîne) $ rs [0]; –

+0

Votre requête est-elle un résultat à une colonne? Je suis avec @ bato3, c'est étrange, la propriété * fields * ou le champ nommé est nécessaire. – Parfait

+2

@Parfait les jeux d'enregistrements ADO et DAO prennent en charge la syntaxe 'rs (fieldnum)' pour accéder aux champs (vous ne devriez pas l'utiliser dans la mesure où je préfère le code explicite). En ce qui concerne la réponse, la vraie façon de le faire est '$ rs [0] -> Value' ou' $ rs-> fields [0] -> Value' pour autant que je sache. La propriété value doit simplement être une chaîne, et ne pas avoir besoin d'un casting supplémentaire. –

0

J'ai résolu tout à l'heure. quand je jette l'objet variant à la chaîne son travaillé comme $ dizi [$ a] [0] = (chaîne) $ rs [0];