2016-01-23 109 views
0

我不能为我的生活弄清楚为什么我的查询返回错误。我正在用PHP生成它。为什么我的MySQL查询返回语法错误?

$column = "display_name"; 
$criteria = "Steven"; 
$query = " 
       SELECT 
        m.user_id AS id, m.email_address, m.display_name, m.status, UNIX_TIMESTAMP(m.join_date) AS join_date, 
        l.listing_id, COUNT(l.member_id) AS total_listings, 
        g.group_id AS group_id, g.title AS group_title 
       FROM users AS m 
       LEFT JOIN listings as l on m.user_id = l.member_id 
       LEFT JOIN groups AS g on m.group_id = g.group_id"; 

      if($column == "display_name"){ 

       $query .= ' 
       WHERE m.display_name LIKE \'%'.$criteria.'\'%'; 

      } else { 

       $query = " 
       WHERE m.".$column." = '$criteria'"; 

      } 

      $query .=" 
       GROUP BY m.user_id"; 

上面的代码产生以下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% GROUP BY m.user_id' at line 8 

SELECT m.user_id AS id, m.email_address, m.display_name, m.status, UNIX_TIMESTAMP(m.join_date) AS join_date, l.listing_id, COUNT(l.member_id) AS total_listings, g.group_id AS group_id, g.title AS group_title FROM users AS m LEFT JOIN listings as l on m.user_id = l.member_id LEFT JOIN groups AS g on m.group_id = g.group_id WHERE m.display_name LIKE '%Steven'% GROUP BY m.user_id 

我使用LIKE %$criteria%LIKE '%$criteria%'试过,我不知道为什么没有正常工作。有任何想法吗?

+0

'LIKE'%Steven'%'是错误的语法。试试'LIKE'%Steven%''而不是 –

+0

'LIKE'%Steven'%'这应该是'LIKE'%Steven%'' –

回答

0

由于您的查询被这样解释

WHERE m.display_name LIKE '%text'% 

这里使用的是单引号前%迹象。那里应该是'%text%'而不是'%text'%。像这样修复它

$query .= ' 
      WHERE m.display_name LIKE \'%'.$criteria.'%\''; 

更好地使用双引号除去所有这些混淆。像这样:

$query .= " 
      WHERE m.display_name LIKE '%$criteria%'"; 
0

你的百分比是在引号外:

$query .= ' 
WHERE m.display_name LIKE \'%'.$criteria.'%\''; 

使用双引号会使事情更加清楚:

$query .= " 
WHERE m.display_name LIKE '%$criteria%'"; 

我当然希望你逃跑的数据良好。