Php 尝试动态写入搜索查询时出现语法错误

Php 尝试动态写入搜索查询时出现语法错误,php,mysql,Php,Mysql,我正在尝试编写一个动态sql查询。该查询可以与整数配合使用。然而,一旦我尝试插入一个字符串,它就失败了 以下是我的疑问: public function getList($params['SearchBy']) { $select = " SELECT u.id, u.firstName,u.lastName,u.city"; $from = " FROM user u"; $where = "

我正在尝试编写一个动态sql查询。该查询可以与整数配合使用。然而,一旦我尝试插入一个字符串,它就失败了

以下是我的疑问:

public function getList($params['SearchBy'])
{ 

    $select = "
        SELECT  
           u.id, u.firstName,u.lastName,u.city";

$from = "
        FROM
        user u";

$where =  "  
        WHERE
            u.live = 1    ";

    if(isset($params['SearchBy']))
    {             
        $where .= 'AND '. implode(' AND ', $params['SearchBy']);
    }

    $GroupBy = " 
        GROUP BY 
             u.id ";

$sql = $select.$from.$where.$GroupBy;   

}
对于searchby(),我通过搜索查询动态生成这些值;然后我将它们放入一个数组中:

$this->searchBy[$key][] = $key.' = '. $val;
如果它是一个整数,则此操作非常有效。但是字符串需要有“”。我不确定是否要转义“”以便它显示在查询中。 i、 e

我尝试过这样做,但没有成功:

$this->searchBy[$topkey][] = $key.' = '. \"$val\";
如果您能给我一些建议,我将不胜感激

多谢各位

下面是从搜索中派生的原始sql查询

SELECT  
        u.id,u.picNo,
                u.membershipType,
                u.firstName,u.lastName
            FROM
            user u  
        LEFT OUTER JOIN
                table_messages_between_members sm
        ON 
                u.id = sm.senderId
            LEFT OUTER JOIN
                list_photos_uploaded_by_members ph
        ON 
                u.id = ph.userId

            WHERE
                u.live = 1  AND u.membershipType = 1 AND u.city = London 
            GROUP BY 
                 u.id 
                ORDER BY

简单的解决办法是

$this->searchBy[$topkey][] = $key.' = "'. $val .'"';

这种方法,尤其是允许最终用户写入/输入值的方法,可能是一种主要的安全威胁,您应该或使用(甚至更好)

这个问题缺少两个最有用的东西。1) 在执行之前,$sql字符串是什么(即打印出来),以及2)错误的全文。这就是说,现在,你在
u.live=1
之间没有空间了。抱歉,在实际查询中,有空格。也。它应该是$params['Searchby']您可以发布它生成的
sql
吗?@PaulKendal然后您应该将实际查询、实际值和实际错误放入数组中。任何事情都涉及猜测,只会使整个过程变慢。@PaulKendal很高兴听到这一点,正如我所说的,尝试使用pdo。也许可以帮你省去一些不愉快的时刻。:)
$this->searchBy[$topkey][] = $key.' = "'. $val .'"';