【发布时间】:2015-01-21 16:29:39
【问题描述】:
我要做什么
我有一个 SQL 表,其中包含客户网站的工作机会列表。
我正在尝试创建一个搜索表单,但并非所有字段都必须填写。
可能的值是:
title = 职位名称
location = 工作地点
sal1 = 期望薪水的底括号
sal2 = 期望薪水的最高括号
守则
$query = 'SELECT * FROM `jobs`';
if($_GET['title']!='') $query.= ' AND `title` LIKE %'.$_GET['title'];
if($_GET['location']!='') $query.= ' AND `location`='.$_GET['location'];
if($_GET['sal1']!='') $query.= ' AND `sal1`>='.$_GET['sal1'];
if($_GET['sal2']!='') $query.= ' AND `sal2`<='.$_GET['sal2'];
$stmt=$dbh->prepare($query.' ORDER BY `date` DESC');
$stmt->execute();
问题
在纸面上这个方法应该可行,但我更喜欢使用准备好的语句。这样做的唯一方法似乎是在每个$_GET 变量上使用mysql_real_escape_string(),因为当我不知道有多少变量正在使用时,我无法弄清楚如何使用execute(array($val1,$val2...))。
如果可能,我如何使用准备好的语句来清理$_GET 变量?
【问题讨论】:
-
%在引号内。另外,您应该将所有$query.=更改为$query .=,因为这会破坏您的查询。 -
@Fred-ii- “另外,您应该将所有 $query.= 更改为 $query .= 因为这会破坏您的查询。” whatchoo talkin bout?跨度>
-
@Madbreaks 自己尝试一下。我不需要,我知道。
-
$query.=尝试执行连接,$query .=(带有空格)正确地使用了操作数 @Madbreaks -
但是,您拥有的 Ben 的代码似乎缺少一些东西。您现在的查询将转换为
SELECT * FROM table AND column LIKE xxx ORDER BY,除非这只是您实际代码的一部分(?)。