2012-03-14 97 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。