[英]SQL string concatenation with if statement
I have simple query for full text search, data comes from HTML form inputs. 我有用于全文搜索的简单查询,数据来自HTML表单输入。 If statement checks or it was filled all three inputs with array_key_exists and then concatenate all strings, but if someone didn't fill first or second input and then my query WHERE part is WHERE AND contract = $var
so in this situation AND is not needed. 如果语句检查或用array_key_exists填充了所有三个输入,然后将所有字符串连接在一起,但是如果有人没有填充第一个或第二个输入,则我的查询WHERE部分是WHERE AND contract = $var
因此在这种情况下并且不需要。 What is solution for my problem, how i can solve this? 什么是我的问题的解决方案,我该如何解决? When AND is needed just add to query string and when didn't needed don't add. 当需要AND时,只需将其添加到查询字符串中,而在不需要时则不添加。
$sql = "SELECT
slug,
title,
company,
location,
email,
street,
city,
phone,
url,
description,
image,
created_at
FROM jobs
WHERE ";
array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';
The easiest solution is to just add a 1
to the original where statement (And AND
before your first $sql
if statement). 最简单的解决方案是在原始where语句中添加1
(在第一个$sql
if语句之前, AND
)。 This will always be true, and will return all the records. 这将始终是正确的,并将返回所有记录。
If darbo-laikas
exists, your query would be ...FROM jobs WHERE 1 AND contract...
which would work correctly. 如果存在darbo-laikas
,则您的查询将是...FROM jobs WHERE 1 AND contract...
可以正常工作。
$sql = "SELECT
slug,
title,
company,
location,
email,
street,
city,
phone,
url,
description,
image,
created_at
FROM jobs
WHERE 1 ";
array_key_exists('paieska', $segment) ? $sql .= "AND MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';
try this, add 'AND' in every last statement 试试这个,在每个最后一个语句中添加“ AND”
array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') AND " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "contract = '".$segment['darbo-laikas']."' AND " : '';
array_key_exists('miestas', $segment) ? $sql .= "location = '".$segment['miestas']."' AND " : '';
before execute, delete last char('AND') using 在执行之前,使用以下命令删除最后一个char('AND')
rtrim($sql, "AND ")
note: rtrim should with whitespace, because your 'AND ' using whitespace too 注意: rtrim应该带有空格,因为您的“ AND”也使用空格
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.