PHP中的mysql_query参数

时间:2011-03-12 22:39:16

标签: php mysql

我目前正在使用PHP编写的界面在MySQL中构建我的第一个数据库,并使用“边做边学”的方法。下图说明了我的数据库。表名位于顶部,属性名称与实际数据库中显示的名称相同。我试图使用表格下面的代码查询每个属性的值。我认为我的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";

6 个答案:

答案 0 :(得分:2)

似乎至少有四个问题:

  • $ find周围没有引号,即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)

如果您希望通过进行学习,那么通过 PDO bind参数进行学习 。这是目前做到的安全和正确的方法。

答案 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);

您可以从http://justinvincent.com/ezsql

获取ezsql