2011-02-24 28 views
0

我想从mysql中选择一行匹配特定ID的行。如果ID匹配,我想获得结果,如果ID在数据库中不存在,则不应该执行任何操作。如果id匹配,从mysql中选择行

我运行某事像这样:

$q = "SELECT * FROM entries where id= '1'"; 
$result = mysql_query($q) or die(mysql_error()); 

if($result){ 
    $row = mysql_fetch_array($result) or die(mysql_error()); 
    $name = $row['name']; 
    } 

echo "hello".$name; 

如果ID“1”在数据库中存在,它应该得到的名字,否则没有或者至少也应该给错误,但是当我使用这个,它只显示没有任何内容的代码后面的页面。我做错了什么?

+3

如果您唯一感兴趣的列是name,请不要SELECT *。 –

+0

你确实在MySQL命令行尝试了代码或类似的东西? – extraneon

+0

您也可以从命令行执行PHP脚本。如果您不使用会话,获取或发布参数,这很有用。 – extraneon

回答

3

如果在此代码后不显示任何代码,这可能是由于发生错误和错误处理被设置,因此错误不会显示。

尝试搜索应包含您看不到的错误的php错误日志文件(normaly php_error.log)。

我想尝试的另一件事是添加更多的回声声明,看看究竟PHP停止解释。 像这样:

$q = "SELECT * FROM entries where id= '1'"; 

$result = mysql_query($q); 

echo '<br />Query is send'; 
if(!$result) { 
    die('<br/>MySQL Error: ' . mysql_error()); 
} 
else { 
    echo '<br />Result is true'; 
    $row = mysql_fetch_array($result); 
    echo '<br />tryed fetching row'; 
    if ($row === FALSE) { 
     echo '<br />$row is not false.'; 
     $name = $row['name']; 
     echo '<br />$name now is "' . $name . '"'; 
    } 
    else { 
     die('<br/>MySQL Error: ' . mysql_error()); 
    } 
} 

echo '<br />hello: "' . $name . '"'; 

这可能有助于让你的问题的更多信息。

1

A SELECT如果指定的条件与任何行不匹配,则查询可以返回0行,并且这不是错误。

您应该在发送查询后检查mysql_num_rows()的结果。

0

也许你应该添加一个else语句给你的if。

if($result) 
.... 

else 
do something 

你甚至可能想做一个try catch语句。

3
$id = 1; 
$sql = "SELECT `name` FROM `entries` WHERE `id` = $id LIMIT 1" //Since the id is probably an integer type on the DB, the single quotes aren't necessary, and sometimes screw it up. I think MySQL possibly thinks it's a string when in quotes. 

$result = mysql_query($sql) or die(mysql_error()); 

if(mysql_num_rows($result)) 
{ 
    $row = mysql_fetch_assoc($result) or die(mysql_error()); 
    $name = $row['name']; 
    echo 'Hello ' . $name; 
} 
+0

谢谢..这项工作非常好,现在我注意到我的代码问题是如果条件。我已经把$结果放在if中,但是如你所说的那样把mysql_num_rows放到那里,就可以工作。 – Jay

相关问题