2012-10-15 59 views
0

由于某种原因,这给我一个错误?多行显示在行中

$result = mysql_query("SELECT wpjb_job.*, 
           wpjb_category.* 
         FROM wpjb_job , 
           wpjb_category 
         WHERE (is_filled='0' AND is_active='1') 
          AND wpjb_job.job_category = wpjb_category.id 
          AND job_country={$countryid} 
         ORDER BY wpjb_job.job_title") or die(mysql_error()); 

这是错误:您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,以便在第6行的'ORDER BY wpjb_job.job_title'附近使用正确的语法。至于我可以计算出我在服务器上有MySQL 5.1。该代码仍然有效,但会在表格后出现错误。

我将它改为以下来测试。 现在它运行良好,但它打印表格的标题两次,一次在开始,然后在结束。变化是在$ countryid,我现在把它作为“$ countryid”这没有给出错误

下面表格的打印代码

$joburl = "http://www.x.com/job/view/"; 
     $result = mysql_query("SELECT wpjb_job.*,wpjb_category.* 
            FROM wpjb_job , wpjb_category 
             WHERE (is_filled='0' AND is_active='1') 
             AND wpjb_job.job_category = wpjb_category.id 
             AND job_country='$countryid' 
             ORDER BY job_title") 
        or die(mysql_error()); 

     echo "<table border='1'>"; 
     echo "<tr> <th>Job</th> <th>Company</th> <th>Industry</th> </tr>"; 

// keeps getting the next row until there are no more to get 

    while($row = mysql_fetch_array($result)) { 

// Print out the contents of each row into a table 

     echo "<tr><td>"; 
     echo '<a href ="http://www.x.com/job/view/'.$row['job_slug'].'"> '.$row['job_title'].' </a>'; 
     echo "</td><td>"; 
     echo $row['company_name']; 
     echo "</td><td>"; 
     echo $row['title']; 
     echo "</td></tr>"; 
    } 
    echo "</table>"; 
    } 
+0

在ORDER BY之前是否有空格 –

+0

您确定{$ countryid}正在被正确评估吗? – ethrbunny

+2

使用'echo $ your_query'来显示正在执行的查询。 – Jocelyn

回答

1

大括号(复杂的语法)通常只用于评估数组元素或对象属性和其他复杂表达式({$array[val]}{$this->object})。你可以从你的查询中删除它们。这可能会导致您的查询无法解释,具体取决于您的PHP版本和变量范围。您可以通过对您的查询字符串(echo "SELECT {$countryid}";)执行echo进行检查。

另外,mysql_函数是being deprecated,如果您传递用户生成的变量,则应使用mysqli_PDO函数并绑定参数。

您的查询也使用隐式连接语法。编写连接查询时应该练习显式语法(见下文)。最后,总是使用列列表而不是全选(SELECT *)以避免不必要的开销。

SELECT a.col1, a.col2, b.col1 
FROM wpjb_job a 
INNER JOIN wpjb_category b ON b.id = a.job_category 
WHERE (is_filled=0 AND is_active=1) 
    AND a.job_country = $countryid 
ORDER BY a.job_title 
+0

比他的php版本评价花括号更可能的是他根本没有定义$ countryid,或者它是一个空字符串或null。其余的立场,我喜欢你提到更好的做法。你有我的投票。 – xception

+0

$ countryid我已经更改为'$ countryid',它可以正常工作,除了现在打印两次表格标题。 –

+0

@ user1745062你能用输出表标题两次的代码更新你的问题吗? – Kermit