2009-08-26 4 views
0

Ma question est comment puis-je être sûr d'une ligne que je voudrais retourner est existe? Je ne veux pas le supprimer avec l'option @ de PHP ou compter les lignes avant chaque requête pour découvrir que la ligne existe ou non.Comment puis-je échapper MySQL 'Impossible de sauter la ligne 0' erreur?

Donc, il y a une requête simple comme ceci:

"SELECT `title`, `id` FROM `event` WHERE `id` = '234'"; 

et la table ne peut pas contenir la ligne avec id 234.

Répondre

0

Vous utilisez probablement mysql_result() pour aller chercher les champs. Considérez mysql_fetch_array à la place. Il retourne FALSE s'il n'y a plus de lignes à récupérer.

<?php 
$mysql = mysql_connect('..', '..', '..') or die(mysql_error()); 
mysql_select_db('..', $mysql) or die(mysql_error()); 

$query = "SELECT `title`, `id` FROM `event` WHERE `id` = '234'"; 
$result = mysql_query($query, $mysql) or die(mysql_error()); 
$row = mysql_fetch_array($result, MYSQL_ASSOC); 

if (!$row) { 
    echo 'no such record'; 
} 
else { 
    echo $row['title'], ' ', $row['id']; 
} 
+0

Gotcha! Merci pour l'aide qui était le problème! Sinon quel est le point dans mysql_result quand mysql_fetch_array fonctionne mieux? – fabrik

+0

J'utilise presque toujours fetch_array, la seule exception sont des requêtes qui sont garanties pour retourner exactement un enregistrement et un ou peut-être deux champs (ou échouer complètement), comme par exemple SELECT Count (*) FROM xyz Dans ce cas, j'utilise parfois mysql_result() ... n'utilisez plus php/mysql mais pdo ;-) – VolkerK

+0

Merci pour l'explication. Oui, COUNT est un type de requête type mysql_result et je pensais pouvoir réduire la charge de MySQL si j'utilise mysql_result aussi souvent que possible. Ma faute est que le site en question utilise beaucoup mysql_result donc j'ai besoin de vérifier mes requêtes pour éliminer les conflits causés par différentes méthodes de requête. – fabrik

1

Vous n'avez pas besoin de compter les lignes avant chaque requête - généralement, vous le faites après.

Qu'en est-il quelque chose comme ça

$query = "SELECT `title`, `id` FROM `event` WHERE `id` = '234'"; 

$results = mysql_query($query); 

if (mysql_num_rows($results)) { 
    // do something because it was found 
} 
+0

Ceci est la solution la plus simple, mais quelque chose ne va pas, car il provoque des erreurs sur les requêtes qui ont bien fonctionné auparavant. :( – fabrik

+0

Pouvez-vous poster une partie du code qui est maintenant en erreur? – alex

Questions connexes