2012-03-14 92 views
0

我在写这篇文章之前找到了一个答案,但没有发现任何内容,但如果我错过了,请随时发布链接。mysql查询SELECT不适用于返回单个值

我想从我的mysql表的单行获取值。我在下面使用的查询不会返回任何内容; mysql_num_rows的回显始终为零。我知道在WHERE中使用的标题变量是有效的,并且数据库已连接等。感谢高级。

$title = $_REQUEST["title"]; 
$query = mysql_query("SELECT * FROM links WHERE title = '$title'"); 
if(!$query) { 
    die ("Error: " . mysql_error()); 
} 
echo mysql_num_rows($query); 
$row = mysql_fetch_row($query);//also tried mysql_fetch_array 
$link = $row['link']; 
$type = $row['type']; 
$user = $row['user']; 
$date = $row['date']; 
$rating = $row['rating']; 
$info = $row['info']; 
+4

您的查询很容易受到SQL注入的影响,仅供参考。 – Interrobang 2012-03-14 03:51:07

+4

请为我们所有这些都是神圣的,不要将请求参数直接放入数据库查询中。如果你这样做,你只是*乞求你的Web应用程序的SQL注入攻击。 – Amber 2012-03-14 03:51:14

+0

所以你知道你的SQL正在返回一些东西?先用'SELECT * FROM links'尝试测试。 – Jon 2012-03-14 03:54:25

回答

0

一个常见的事情是打印出你的SQL查询,以确保它所期望的。

$sqlquery = "SELECT * FROM links WHERE title='".$title."'"; 
$query = mysql_query($sqlquery); 
echo $sqlquery; 

此外,正如已经提到的...你很容易受到SQL注入攻击。

1

尝试:

$title = mysql_real_escape_string($_REQUEST["title"]); 
$query = mysql_query("SELECT * FROM links WHERE title LIKE '$title'"); 
echo $query // run it in mysql prompt to check if there are any results first. 
if(!$query) { 
    die ("Error: " . mysql_error()); 
} 
echo mysql_num_rows($query); 
$row = mysql_fetch_row($query);//also tried mysql_fetch_array 
$link = $row['link']; 
$type = $row['type']; 
$user = $row['user']; 
$date = $row['date']; 
$rating = $row['rating']; 
$info = $row['info']; 
1
$title = $_REQUEST["title"]; 
$query = mysql_query("SELECT * FROM links WHERE title = '$title'"); 
if(!$query) { 
die ("Error: " . mysql_error()); 
} 
echo mysql_num_rows($query); 
while($row = mysql_fetch_row($query)) 
{ 
    $link = $row['link']; 
    $type = $row['type']; 
    $user = $row['user']; 
    $date = $row['date']; 
    $rating = $row['rating']; 
    $info = $row['info']; 
    } 
1

如果mysql_num_rows返回零就意味着你的查询可能不选择从数据库中任何东西。你必须检查你的sql查询是否真的选择了任何东西。检查$ title变量的值并尝试将查询直接发送到数据库。

你也很容易sql注入。始终过滤用户输入。你可以使用mysql_real_escape_string和htmlspecialchars。

1

尝试获得值,而不只是像这样的一个地方:

$query = mysql_query("SELECT * FROM links") or die(mysql_error()); 

如果有错,应该提示您的错误。

很多人都已经在说,但尝试清洗请求参数^ _^

0

你应该使用 而($行=和mysql_fetch_row($查询){...},还可以使用mysql_real_escape_string避免SQL并且也不使用mysql_num_rows的infront命令,即使我认为没有必要获取行数来执行脚本的其余部分,但是我并没有必要获得行数来执行脚本的其余部分。 Post script。