2012-02-28 60 views
0

我想返回时无法使用的一些数据不存在,但我认为有些事情是错误的,我的代码else和如果MySQL和PHP错误

$id=$_GET["id"]; 
$sql="SELECT * FROM book WHERE id = '".$id."' AND type = 'new'"; 
if(!empty($sql)) 
{ 
    $result = mysql_query($sql); 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} 
else 
{ 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 

如果审核,请其返回而如果回顾不可用“审查不可用”不会回显。

+1

你正在使用带有$ sql值的if语句,并且allways有数据,而是使用$ result。 – Juanma 2012-02-28 12:28:24

回答

0

您实际上是在检查字符串是否为空,而不是结果集,看到了吗?

!empty("any string") 

将始终返回true。

2

$sql变量包含一个字符串,它在检查它是否为空之前分配。在这种情况下,它永远不会是空的。

也许你想要做的是检查查询返回的结果数量?为了发生这种情况,您必须先运行查询。这里是一个快速(把我的头顶部)例如使用的mysqli:

$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db"); 

$id = $_GET["id"]; 
$sql = "SELECT * FROM book WHERE id = '".$id."' AND type = 'new'"; 

// Run query 
if ($result = $mysqli->query($sql)) 
{ 
    // We got results 
    var_dump($result); 
    $result->close(); 
} 
else 
{ 
    // No results 
    echo("Oops. Nothing here."); 
} 

为了避免SQL注入,我建议学习PDO,以及如何编写准备语句。

2
$id = (int) $_GET['id']; // important ! 
$sql = 'SELECT * FROM book WHERE id = ' . $id. ' AND type = "new"'; 
$result = mysql_query($sql); 

if(mysql_num_rows($result) > 0) { 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} else { 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 

重要的是,将GET参数转换为指定类型(此处为int)以避免SQL注入!

使用mysql_num_rows您可以检查查询返回的行数。你必须做一个查询来检查它。检查$sql变量是否为空是无用的,因为它只是一个始终为“满”的字符串 - 它包含了您的查询语句。

+0

num rows比较比检查结果更昂贵,但它应该工作。你也可以防范SQL注入,但请在你的答案中解释它! – markus 2012-02-28 12:33:20

+0

嗨,我得到警告:mysql_num_rows()期望参数1是资源,布尔在 – meandme 2012-02-28 12:36:16

+0

@ markus-tharkun给出我已经解释了它。 @meandme所以你在查询中有一些错误,'mysql_query'返回'false'。 – hsz 2012-02-28 12:44:12

0

$sql永远不会是空的..因为是你刚设置的字符串。你可能想这样做:

$id=$_GET["id"]; 
$sql="SELECT * FROM book WHERE id = '".intval($id)."' AND type = 'new'"; 
$result = mysql_query($sql); 
if(!empty($result) and mysql_num_rows($result) > 0) 
{ 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} 
else 
{ 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 
+0

你是复制粘贴不好的做法。此代码易受SQL注入攻击。 – markus 2012-02-28 12:31:50

+0

我从问题中复制来编辑代码..那有什么问题?如果你建议我从另一个答案复制你错了..因为我们在10秒内回答差异..虽然你是正确的SQL注入..我会编辑..谢谢 – SERPRO 2012-02-28 12:40:57

+0

是的,这就是我的意思......其余的复制当然没问题。 – markus 2012-02-28 12:42:14