Php SQL where子句中的转换错误
在ODBC数据库表中,我有一个名为pSDateTime的列,它的格式为smalldatetime 我正在一个基于PHP的网站上运行一个搜索表单,该网站有一个下拉列表,您可以在其中选择2015、2014、2013等 我在提交搜索时遇到此错误: 警告:odbc_exec():SQL错误:[Microsoft][odbc SQL Server 转换varchar值时驱动程序][SQL Server]转换失败 “%2014%”转换为数据类型int,SQLExecDirect中的SQL状态为22005 这是我运行的查询:Php SQL where子句中的转换错误,php,sql,odbc,Php,Sql,Odbc,在ODBC数据库表中,我有一个名为pSDateTime的列,它的格式为smalldatetime 我正在一个基于PHP的网站上运行一个搜索表单,该网站有一个下拉列表,您可以在其中选择2015、2014、2013等 我在提交搜索时遇到此错误: 警告:odbc_exec():SQL错误:[Microsoft][odbc SQL Server 转换varchar值时驱动程序][SQL Server]转换失败 “%2014%”转换为数据类型int,SQLExecDirect中的SQL状态为22005 这
$query = "SELECT *
FROM tbspeakers s join tbpresentations p on
s.spkrId = p.spkrId
join tbsessions ss on
p.courseSessionid = ss.courseSessionId
join tbcourses c on
ss.courseId = c.courseId
WHERE
(fname LIKE '%$searchq%' OR lname LIKE '%$searchq%' OR pTitle LIKE '%$searchq%' AND Year(pSDateTime) = '%$yearq%')
ORDER BY pSDateTime DESC";
我尝试了不同类型的转换,并不断得到相同的错误。当我在MicrosoftSQLServerManagementStudio上运行查询时,它工作正常。我似乎无法实现“%$yearq%”格式/转换。YEAR()
返回一个整数。这会导致等式出现问题,因为随后会转换另一个参数。这就产生了一个错误
两种选择:
Year(pSDateTime) = $yearq
或:
您可能不希望将通配符%
用于=
。这些仅适用于类
您还应该弄清楚如何参数化进入查询的值。这使得它更安全(防止SQL注入),而且通常更快(通过消除每次执行代码时的重新编译)。这很有效,谢谢!是的,我运行
$\u POST['search']=htmlspecialchars($\u POST['search']);$_POST['year']=htmlspecialchars($_POST['year'])代码>如果将“%$yearq%”的顺序切换为Year(pSDateTime),会发生什么情况?我相信引擎会将Year转换为string,而不是string转换为varchar。虽然我不确定access是否支持这种类型的转换。
datename(year, psDateTime) = '$yearq'