这是我的查询的一部分:
where workcenter = '$query' or EmployeeName like '$query'
workcenter
是一个数字,EmployeeName
是一个字符串。用户输入一个数字或名称,这将在表中搜索工作中心#或员工。
在我的PSQL编辑器中,此查询在硬编码时有效:
where workcenter = 'Adrian' or EmployeeName like '%Adrian%'
我应该如何编写EmployeeName like '$query'
以便它返回结果?
我尝试过:%'$query'%
'%$query%'
'%{$query}%'
编辑:在遵循@mirtheli的建议后,我尝试了
$base = 'select Employee,EmployeeName,WorkcenterName from zzHENEmplWkcntr ';
$query = $_GET['wc'];comes from input text (example: 1234 or adrian)
$psql = $base . "where workcenter = '$query' or EmployeeName like '%' .$query . '%'";
echo "Query: ".$psql;
Output: select Employee,EmployeeName,WorkcenterName from zzHENEmplWkcntr where workcenter = 'adrian' or EmployeeName like '%' . adrian . '%'
我得到的错误:致命错误:未捕获错误:调用C:\inetpub\wwwroot\viewWorkcenter.php:21中布尔上的成员函数execute((堆栈跟踪:#0{main}在C:\inetpub\Wwwwroot\WiewWorkcenter.php的第21行中抛出
线路20&21:
$qry = $conn->prepare($psql);
$qry->execute();
我的理解是,这个错误意味着查询没有返回任何结果。
您需要将通配符(%
(与$query
值连接起来。您还需要转义单引号。我使用的是PSQLDEMODATA,所以我的字段名与您的不同,但它应该能让人明白这一点。您将使用以下内容:
$basesql = 'select * from class ';
$OrClause = 'GER';
$sql = $basesql . ' where id > 10 or name like '%' . $OrClause . '%'';
echo ($sql . '<br>');
显示:
select * from class where id > 10 or name like '%GER%'
编辑:在我发布答案后,问题中发布的代码有点不同。问题是,当双引号和单引号混合使用时,可能会造成混淆
固定代码为:
$psql = $base . "where workcenter = '$query' or EmployeeName like '%" .$query . "%'";
并生成:
Query: select Employee,EmployeeName,WorkcenterName from zzHENEmplWkcntr where workcenter = 'fff' or EmployeeName like '%VALUE%'
由于字符串使用双引号,因此不需要转义值周围的单引号。