2011-03-12 160 views
1

我目前正在使用PHP編寫的接口構建我的第一個MySQL數據庫,並使用「邊做邊學」方法。下圖說明了我的數據庫。表名稱位於頂部,屬性名稱與它們在實際數據庫中的顯示名稱相同。我試圖使用表下方的代碼查詢每個屬性的值。我認爲我的mysql_query()函數有問題,因爲我能夠觀察到我的表單成功提交時的預期行爲,但沒有返回搜索結果。任何人都可以看到我要去哪裏嗎?PHP中的mysql_query參數

enter image description here

<form name = "search" action = "<?=$PHP_SELF?>" method = "get"> 
    Search for <input type = "text" name = "find" /> in 
    <select name = "field"> 
     <option value = "Title">Title</option> 
     <option value = "Description">Description</option> 
     <option value = "City">Location</option> 
     <option value = "Company_name">Employer</option> 
    </select> 
    <input type = "submit" name = "search" value = "Search" /> 
</form> 

$query = "SELECT Title, Descrition, Company_name, City, Date_posted, Application_deadline 
        FROM job, employer, address 
        WHERE Title = $find 
        OR Company_name = $find 
        OR Date_posted = $find 
        OR Application_deadline = $find 
        AND job.employer_id_job = employer.employer_id 
        AND job.address_id_job = address.address_id"; 
+0

將表單數據插入到mysql表中的代碼在哪裏?你似乎只是查詢,但從不插入 – Roman 2011-03-12 22:47:11

+0

已經使用MySQL Workbench插入了測試數據。我現在的目標僅僅是從數據庫中提取數據。 – 2011-03-12 23:05:19

回答

2

好像有至少四個方面的問題:

  • 您沒有引號$發現,即WHERE Title = '$find'
  • 好像你不被使用mysql_real_escape_string(還是你只是省略你爲了簡潔問題的代碼?)
  • 你拼寫錯誤Description
  • AND的優先級高於或者你可能想在你表達括號:

    WHERE (Title = '$find' 
    OR Company_name = '$find' 
    OR Date_posted = '$find' 
    OR Application_deadline = '$find') 
    AND job.employer_id_job = employer.employer_id 
    AND job.address_id_job = address.address_id" 
    

我懷疑一個或多個這些都是爲什麼它不工作的原因。不過要確保你應該發佈更多的代碼和表結構。

另一點是您正在使用舊的ANSI-89連接語法。我建議使用在SQL-92中添加的新語法(FROM a JOIN b ON ...)。這樣可以防止出現第四個錯誤,以及與舊語法相比具有許多其他優點。

也嘗試使用mysql_error找出確切的錯誤信息是什麼。並請在你的問題中包含這條消息。

0

對where子句中的值使用單引號。

0

試試這個之一:

$fields= array('Title','Company_name', 'Date_posted','Application_deadline'); 
if(!in_array($_GET['field'],$fields)) die(); // do some error handling here 

$query = "SELECT Title, Descrition, Company_name, City, Date_posted, Application_deadline 
        FROM job, employer, address 
        WHERE 
        $field = '".mysql_real_escape_string($_GET['find']) ."' 
        AND job.employer_id_job = employer.employer_id 
        AND job.address_id_job = address.address_id"; 
1

如果你喜歡然後在PDObind參數做學習學習。這是最近做的的安全和正確的方法。

0

我建議也使用ezSQL來做所有的查詢處理,它很容易放入你的代碼,並使所有的處理變得簡單,只需在配置文件中包含數據庫信息,在配置文件中包含ezSQL的類,設置到類的全球呼籲像

$db = new ez_SQL(); 

然後在referencin PHP文件,只是這樣做

global $db; 
$results = $db->query("SELECT statment", ARRAY_A); 

你可以從ezsql得到:http://justinvincent.com/ezsql