2011-02-24 75 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

相關問題