我目前正在使用PHP编写的界面在MySQL中构建我的第一个数据库,并使用“边做边学”的方法。下图说明了我的数据库。表名位于顶部,属性名称与实际数据库中显示的名称相同。我试图使用表格下面的代码查询每个属性的值。我认为我的mysql_query()
函数有问题,因为我能够在成功提交表单时观察到预期的行为,但是没有返回任何搜索结果。谁能看到我在哪里错了?
<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 :(得分:2)
似乎至少有四个问题:
WHERE Title = '$find'
。mysql_real_escape_string
(或者您为了简洁而在问题中省略了该代码?)Description
。AND的优先级高于OR,因此您可能需要在表达式中使用括号:
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
找出确切的错误消息。请在您的问题中加入信息。
答案 1 :(得分:1)
答案 2 :(得分:0)
对where子句中的值使用单引号。
答案 3 :(得分: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";
答案 4 :(得分:0)
如果单引号不是你唯一的问题(肯定是它的一部分),请检查mysql_error()的返回。
检查代码示例: http://www.php.net/manual/en/function.mysql-query.php
答案 5 :(得分:0)
我建议使用ezSQL来完成所有查询处理,很容易放入代码并使所有处理变得简单,只需在配置文件中包含db info,在配置文件中包含ezSQL的类,设置对类的全局调用,如
$db = new ez_SQL();
然后在你的referencin php文件中,就这样做
global $db;
$results = $db->query("SELECT statment", ARRAY_A);
获取ezsql