2009-08-26 17 views
0

我的问题是如何确定我想返回的行是存在的?我不想用PHP的@选项来抑制它,或者在每个查询之前计算行数以找出行是否存在。我如何逃脱MySQL'无法跳转0行'错误?

所以这是一个简单的查询是这样的:

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

和表不能包含具有id 234行。

回答

0

你可能会使用mysql_result()什么来获取领域。改为考虑mysql_fetch_array。如果没有更多行要提取,它将返回FALSE。

<?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

嘿!谢谢你的帮助,这个问题!否则mysql_fetch_array工作的更好时,mysql_result有什么意义? – fabrik 2009-08-26 08:06:09

+0

我几乎总是使用fetch_array,唯一的例外是确保返回一个记录和一个或两个字段(或完全失败)的查询,如SELECT Count(*)FROM xyz。在这种情况下,我有时使用mysql_result()...“已经使用”,因为我不要再使用php/mysql,而是使用pdo ;-) – VolkerK 2009-08-26 08:15:22

+0

感谢您的解释。是的,COUNT是一个典型的mysql_result查询类型,我想我可以减少MySQL的负载,如果我尽可能经常使用mysql_result。我的错是网站正在大量使用mysql_result,因此我需要检查我的查询以消除由不同查询方法引起的冲突。 – fabrik 2009-08-26 08:25:24

1

您不必在每次查询之前对行进行计数 - 通常您会在之后执行此操作。

大约是这样的

$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

这是最简单的解决方案,但什么是错的,因为它会引发对之前工作的罚款查询错误。 ( – fabrik 2009-08-26 07:51:08

+0

)你可以发布一些现在出错的代码吗? – alex 2009-08-26 07:53:29