2010-12-01 6 views
0

Exemple de code:A propos du mysql_query -> Procédure mysql_fetch_array()

$infoArray = array(); 
require_once("connectAndSelect.php"); 
// Connects to mysql and selects the appropriate database 
$sql = "SOME SQL"; 
if($results = mysql_query($sql)) 
{ 
    while($result = mysql_fetch_array($results, MYSQL_ASSOC)) 
    { 
     $infoArray[] = $result; 
    } 
} 
else 
{ 
    // Handle error 
} 
echo("<pre>"); 
print_r($infoArray); 
echo("</pre>"); 

Dans cet exemple de code, je veux simplement obtenir le résultat de ma requête dans $ infoArray. Tâche simple, mesures simples ... pas. J'aurais aimé quelque chose comme ceci:

$sql = "SOME SQL"; 
$infoArray = mysql_results($sql); 

Mais, comme vous pouvez le voir, j'ai deux variables supplémentaires et une boucle while que je ne me soucie pas trop. Ils ne font rien: je ne les utiliserai plus jamais. De plus, je ne sais jamais comment les appeler. Ici, j'utilise $ results et $ result, ce qui représente ce qu'ils sont, mais peut aussi être assez déroutant car ils se ressemblent beaucoup. Alors, voici mes questions:

  1. est-il une méthode plus simple que je ne sais pas pour ce genre de tâche ?
  2. Et si non, quels noms donnez-vous ces variables à usage unique? Est-ce que existe-t-il une norme?
+0

La boucle est alors assurez-vous d'récupérera tous les résultats reviennent par MySQL ** IF ** votre retour sql précédente plus d'un match. Donc, vous ne pouvez pas les ignorer, sinon c'est ** incomplet ** – ajreal

Répondre

0

Sauf si vous y êtes légué par une base de code existante. N'utilisez PAS l'extension mysql. Utilisez PDO ou Mysqli. PDO étant préféré sur les deux.

Votre exemple peut être venir un ensemble d'instructions très Consise avec AOP:

// create a connection this could be done in your connection include 
$db = new PDO('mysql:host=localhost;dbname=your_db_name', $user, $password); 

// for the first or only result 
$infoArray = $db->query('SOME SQL')->fetch(PDO::FETCH_ASSOC); 

// if you have multiple results and want to get them all at once in an array 
$infoArray = $db->query('SOME SQL')->fetchAll(PDO::FETCH_ASSOC); 

    // if you have multiple results and want to use buffering like you would with mysql_result 
    $stmt = $db->query('SOME SQL'); 
    foreach($stmt as $result){ 
    // use your result here 
    } 

Cependant, vous ne devez utiliser ce qui précède quand il y a maintenant des variables dans la requête. S'il y a des variables dont ils ont besoin d'être échappé ... la meilleure façon de gérer cela est une déclaration préparée:

$stmt = $db->prepare('SELECT * FROM some_table WHERE id = :id'); 
$stmt->execute(array(':id' => $id)); 

// get the first result 
$infoArray = $stmt->fetch(PDO::FETCH_ASSOC); 

// loop through the data as a buffered result set 
while(false !== ($row = $stmt->fetch(PDO::FETCH_ASSOC))){ 
    // do stuff with $row data 
} 
+0

Je n'ai jamais entendu parler de PDO. Pourriez-vous fournir un lien? – Shawn

+0

@Shawn: PHP docs - http://www.php.net/manual/fr/book.pdo.php – prodigitalson

1

La boucle while est vraiment nécessaire que si vous attendez plusieurs lignes à renvoyer. Si vous obtenez juste une ligne, vous pouvez simplement utiliser mysql_fetch_array().

$query = "SOME SQL"; 
$result = mysql_query($query); 
$row = mysql_fetch_array($result); 

Pour les retours sur une seule ligne est la norme que j'utilise. Bien sûr, il est un peu maladroit de le faire en PHP, mais au moins vous avez le processus décomposé en étapes déboguageables.

0

Utilisez AOP:

<?php 

/*** mysql hostname ***/ 
$hostname = 'localhost'; 

/*** mysql username ***/ 
$username = 'username'; 

/*** mysql password ***/ 
$password = 'password'; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password); 
    $sql = "SELECT * FROM myTable"; 
    $result = $dbh->query($sql) 
    //Do what you want with an actual dataset 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
?>