2015-11-06 1 views
0

Donc c'est ça.Existe-t-il un moyen simple dans PHP 5.x de répercuter n'importe quel type de données sur un RecordSet?

j'ai écrit une instruction SQL muet comme le canard, comme:

SELECT * FROM table 

Fondamentalement, je veux:

  1. Faites une instruction SELECT générique;
  2. En boucle à travers le Resulset;
  3. Imprimez le "nom" des métadonnées comme en-têtes de tableau.
  4. Boucler à nouveau le jeu de résultats;
  5. Imprime chaque enregistrement sous forme de tableau.
  6. Imprimez chaque champ en tant que colonne de table.
  7. Comment tester les données, sur le terrain afin que je puisse correctement répercuter ces données sous forme de chaîne? Je ne suis pas sûr si je me suis fait clair.

Je ne peux pas savoir quelles données seront renvoyées à partir des instructions, précédemment. Ceci est motivé après avoir essayé d'imprimer des champs DateTime et d'obtenir une erreur.

Ceci est mon code PHP:

$sql = "SELECT * FROM client";  

    $stmt = sqlsrv_query($conn, $sql);  

    if($stmt === false) 
    { 
     die(print_r(sqlsrv_errors(), true)); 
    } 

    $num_fields = sqlsrv_num_fields($stmt); 

    echo '<table class="table table-striped table-bordered">'; 
    // Output Headers - In SQL Server 

    echo '<tr style="font-size:12px">'; 
    foreach(sqlsrv_field_metadata($stmt) as $fieldMetadata) 
    { 
     foreach($fieldMetadata as $name => $value) 
     { 
      if ($name == "Name"){ 
       echo "<td><strong>" . "$value" . "</td></strong>"; 
      } 
     } 

    } 
    echo "</tr>"; 

    // Output fields data, after fetch new row. 
    while (sqlsrv_fetch ($stmt)) 
    { 
     // \echo '<tr class="small" style="font-size:10px">'; 
     echo '<tr class="small">'; 
     for ($i = 0; $i < $num_fields; $i++) 
     { 
      echo '<td class="text-nowrap">'; 
      print_r (sqlsrv_get_field($stmt, $i)); 
      echo "</td>"; 
     } 
     echo "</tr>"; 
    } 
    echo "</table>"; 

S'il vous plaît, corrigez-moi au sujet de toute mauvaise pratique, ou un codage stupide ... Je suis un débutant complet ici.

+0

Notez que dans la première boucle, vous avez mis la balise de fermeture 'strong' en dehors de' td'. En outre, vous pouvez simplement écrire ** echo "$ value" ** sans opérateur de point. – trincot

+0

Merci, @trincot, j'ai écrit ce script dans un peu d'urgence ... Déjà corrigé. :) – JrZabott

Répondre

0

Vous pourriez specify the data type de la valeur de résultat, et choisissez le type de données string, comme suit:

print_r (sqlsrv_get_field($stmt, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR))); 

Sinon, au lieu d'appeler sqlsrv_fetch et sqlsrv_get_field, utilisez sqlsrv_fetch_array comme qui convertit automatiquement toutes les données récupérées à string.

+0

Merci de m'indiquer la bonne direction ... J'apprécie vraiment cela; Je lis la documentation en ce moment ... Mais juste pour une brève clarification, ce type de données spécifié (SQLSRV_PHPTYPE_STRING()), peut implicitement convertir les données Datetime, en une chaîne pré-formatée par défaut? Est-ce que c'est ça? – JrZabott

+0

Oui c'est tout. Dans le même temps, j'ai également décrit une alternative. Votre préférence pourrait aller à celui-ci car il semble moins obscur. – trincot

+0

Merci beaucoup. Cela a bien fonctionné. :) Désolé d'être en retard. – JrZabott