web-dev-qa-db-fra.com

PHP - Un moyen simple de lire un seul enregistrement depuis MySQL

Quel est le meilleur moyen avec PHP de lire un seul enregistrement depuis une base de données MySQL?

SELECT id FROM games

J'essayais de trouver une réponse aux anciennes questions, mais sans succès.

56
neon
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);
58
Dan Grossman
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database_name', $link);
$sql = 'SELECT id FROM games LIMIT 1';
$result = mysql_query($sql, $link) or die(mysql_error());
$row = mysql_fetch_assoc($result);
print_r($row);

Il manquait peu de choses dans la réponse de ChrisAD. Après la connexion à mysql, il est crucial de sélectionner la base de données. En outre, l'instruction die() vous permet de voir les erreurs si elles se produisent.

Attention, cela ne fonctionne que si vous avez 1 enregistrement dans la base de données, car vous devez sinon ajouter WHERE id=xx Ou quelque chose de similaire pour obtenir niquement une ligne et pas plus. Aussi, vous pouvez accéder à votre identifiant comme $row['id']

31

En utilisant PDO vous pourriez faire quelque chose comme ceci:

$db = new PDO('mysql:Host=hostname;dbname=dbname', 'username', 'password');

$stmt = $db->query('select id from games where ...');
$id = $stmt->fetchColumn(0);
if ($id !== false) {
    echo $id;
}

Vous devez évidemment aussi vérifier si PDO::query() exécute la requête en OK (soit en vérifiant le résultat, soit en demandant à PDO de générer des exceptions à la place).

21
Tom Haigh

En supposant que vous utilisez une clé primaire auto-incrémentée, ce qui est la façon habituelle de faire les choses, vous pouvez accéder à la valeur de clé de la dernière ligne que vous avez insérée dans la base de données avec:

$userID = mysqli_insert_id($link);

sinon, vous devrez connaître plus de détails sur la ligne que vous essayez de trouver, telle que l'adresse e-mail. Sans connaître la structure de votre table, nous ne pouvons pas être plus spécifiques.

Quoi qu'il en soit, pour limiter votre requête SELECT, utilisez une instruction WHERE comme ceci: (Exemple générique)

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE something = 'unique'"));
$userID = $getID['userID'];

(Exemple spécifique) Ou un exemple plus spécifique:

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE userID = 1"));
$userID = $getID['userID'];
14
prl77

Attention! Votre SQL n'est pas une bonne idée, car il sélectionnera toutes les lignes (aucune clause WHERE ne suppose "WHERE 1"!) Et obstruera votre application si vous avez un grand nombre de lignes. (Quel est l'intérêt de sélectionner 1 000 lignes lorsque 1 le fera?) Ainsi, lorsque vous sélectionnez une seule ligne, veillez à spécifier la clause LIMIT:

$sql = "SELECT id FROM games LIMIT 1";  // Select ONLY one, instead of all
$result = $db->query($sql);
$row = $result->fetch_assoc();
echo 'Game ID: '.$row['id'];

Cette différence nécessite que MySQL sélectionne niquement le premier enregistrement correspondant. Il est donc important de classer la table ou vous devez utiliser une clause WHERE. Cependant, il faut beaucoup moins de mémoire et de temps pour trouver cet enregistrement que pour obtenir chaque enregistrement et la première ligne de sortie.

8
Robert K

Utilisez LIMIT 1. c'est facile.

$rows = $db->query("select id from games LIMIT 1");
$row  =  $rows->fetch_object();
echo $row->id;
4
danny

Une autre réponse pour le style orienté objet. J'ai trouvé cette solution pour moi:

$id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;

redonne un seul identifiant. Vérifiez que votre conception garantit que vous avez le bon.

4
MaggusK

Le plus simple est d’utiliser mysql_result . J'ai copié une partie du code ci-dessous à partir d'autres réponses pour gagner du temps.

$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);

$num_rows = mysql_num_rows($result);

// i is the row number and will be 0 through $num_rows-1
for ($i = 0; $i < $num_rows; $i++) {
    $value = mysql_result($result, i, 'id');
    echo 'Row ', i, ': ', $value, "\n";
}
2
Powerlord

Tout d'abord, vous vous connectez à votre base de données. Ensuite, vous construisez la chaîne de requête. Vous lancez ensuite la requête et stockez le résultat. Enfin, vous extrayez les lignes souhaitées du résultat à l'aide de l'une des méthodes d'extraction.

$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);

$singleRow = mysql_fetch_array($result) 
echo $singleRow;

Edit: Désolé, j'ai oublié la connexion à la base de données. Ajouté maintenant

2
Chris Dale

J'aime beaucoup la philosophie de bibliothèque de base de données ezSQL , qui englobe les méthodes SQL natives dans une interface plus facile à utiliser.

Extraire une seule valeur de la base de données est trivial:

  $id = $db->get_var("SELECT id FROM games WHERE ...");

Cela facilite également l'extraction d'une seule ligne, colonne ou ensemble de lignes.

2
gavinandresen

"Meilleure façon" en dehors de certaines manières habituelles de récupérer un seul enregistrement de la base de données avec PHP va comme ça:

avec mysqli

$sql = "SELECT id, name, producer FROM games WHERE user_id = 1";
$result = $db->query($sql);
$row = $result->fetch_row();

avec Zend Framework

// Dans la classe de table

$select = $this->select()->where('user_id = ?', 1);  
$row = $this->fetchRow($select);
2
markus

Je conviens que mysql_result est le moyen le plus simple de récupérer le contenu d’une cellule d’un ensemble de résultats MySQL. Petit code:

$r = mysql_query('SELECT id FROM table') or die(mysql_error());
if (mysql_num_rows($r) > 0) {
    echo mysql_result($r); // will output first ID
    echo mysql_result($r, 1); // will ouput second ID
}
1
Vinyas

Celui-ci est simple

//Read table records
$show = mysqli_query($link,"SELECT * FROM table_name");
while($row = @mysqli_fetch_object($show))
{
//Read a row/record
echo $row->FIELD1."<br>";
echo $row->FIELD2."<br>";
echo $row->FIELD3."<br><hr>";
}
0
DeathRs

Mieux si SQL sera optimisé avec l'addition de LIMIT 1 à la fin:

$query = "select id from games LIMIT 1";


SO REPONSE EST (fonctionne sur php 5.6.3) :

Si vous souhaitez obtenir le premier élément de la première ligne (même s'il ne s'agit pas d'une colonne ID):

queryExec($query) -> fetch_array()[0];

Si vous souhaitez obtenir la première ligne (élément unique de la base de données)

queryExec($query) -> fetch_assoc();

Si vous voulez une colonne exacte de la première ligne

queryExec($query) -> fetch_assoc()['columnName'];

ou besoin de corriger la requête et utiliser le premier moyen écrit :)

0
Andrew
$db = new mysqli('localhost', 'tmp', 'tmp', 'your_db');  
$db->set_charset('utf8');
if ($db->connect_errno)
    throw new Exception('MySQL: ('.$db->connect_errno.') '.$db->connect_error);

if ($row = $db->query("SELECT id FROM games LIMIT 1")->fetch_row()) //NULL or array
    $id = $row[0];
0
Vasilii Suricov

Un moyen facile de récupérer un seul enregistrement de la base de données MySQL en utilisant PHP List

La requête SQL est SELECT user_name from user_table WHERE user_id = 6

Le PHP Code pour la requête ci-dessus est

$sql_select = "";
$sql_select .= "SELECT ";
$sql_select .= "  user_name ";
$sql_select .= "FROM user_table ";
$sql_select .= "WHERE user_id = 6" ;

$rs_id = mysql_query($sql_select, $link) or die(mysql_error());
list($userName) = mysql_fetch_row($rs_id);

Note: Le concept de liste devrait être applicable pour l'extraction d'une seule ligne, pas pour plusieurs lignes

0
B.Balamanigandan