搜索功能不适用于我的php应用程序。我总是遇到语法错误
为了让搜索功能正常工作,我一直遇到语法错误,不确定我一开始是否做对了。我有几个列id、name、status、lanId和comments,这个表称为requests。只是需要一点帮助来解决这个问题。我不认为搜索这个词是正确的,我在那里。我只是不知道如何为我的应用程序创建搜索功能搜索功能不适用于我的php应用程序。我总是遇到语法错误,php,sql-server,pdo,Php,Sql Server,Pdo,为了让搜索功能正常工作,我一直遇到语法错误,不确定我一开始是否做对了。我有几个列id、name、status、lanId和comments,这个表称为requests。只是需要一点帮助来解决这个问题。我不认为搜索这个词是正确的,我在那里。我只是不知道如何为我的应用程序创建搜索功能 <html> <head> </head> <body> <form name="frmSearch" method="post
<html>
<head>
</head>
<body>
<form name="frmSearch" method="post" action="search.php">
<table width="599" border="1">
<tr>
<th>Keyword
<input name="var1" type="text" id="var1">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?php
$serverName = "xx.xx.xxx.xxx";
// Connect to MSSQL via PDO
try {
$db= new PDO( "sqlsrv:server=$serverName ; Database=systems_requests", "xxx", "xxx");
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(Exception $e)
{
die( print_r( $e->getMessage() ) );
$var1 = str_replace(array('%','_'),'',$_POST['var1']);
if (!$var1)
{
exit('Invalid form value: '.$var1);
}
$query = "SELECT * FROM requests WHERE status='Received' LIKE :search";
$stmt = $db->prepare($query);
$stmt->bindValue(':search', '%' . $var1 . '%', PDO::PARAM_INT);
$stmt->execute();
/* Fetch all of the remaining rows in the result set
print("Fetch all of the remaining rows in the result set:\n");*/
$result = $stmt->fetchAll();
foreach( $result as $row ) {
echo $row["id"];
echo $row["status"];
echo $row["name"];
echo $row["lanId"];
echo $row["comments"];
}
?>
</body>
</html>
好的,我对它做了一些修改,页面显示出来了,但是现在我得到一个错误SqlSrv_fetch_数组期望参数1是resource,如果给定空值
<html>
<head>
</head>
<body>
<form name="frmSearch" method="post" action="search.php">
<table width="599" border="1">
<tr>
<th>Keyword
<input name="var1" type="text" id="var1">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?php
require_once("../includes/db_connect.php");
$var1 = $_POST['var1'];
$query = "select * from requests where comments like '%" . $var1 . "%'";
if( $stmt === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
echo 'Id: '.$row['id'];
echo '<br/> name: '.$row['name'];
echo '<br/> lanId: '.$row['lanId'];
echo '<br/> comments: '.$row['comments'];
}
?>
</body>
</html>
您的选择不应该更像:
$query = "SELECT * FROM requests WHERE status='Received' and [columnName] LIKE ?";
$stmt = $db->prepare($query);
$stmt->bindValue(?, '%' . $var1 . '%', PDO::PARAM_INT);
否则,查询将无法知道您正在搜索的列。出于某种原因,一些人在这里很难找到问题所在。这就是现在语法正确的查询。我不知道你想在搜索中包括哪一列,但是用你的实际列名替换掉某个列,这应该在那里
$query = "SELECT * FROM requests WHERE status='Received' AND SomeColumn LIKE :search";
除了在评论和肖恩的回答中已经提到的关于你使用WHERE和LIKE的方式之外,我还将此作为补充回答: 你的渔获量少了一个右括号
catch(Exception $e)
{
die( print_r( $e->getMessage() ) );
}
^ added
使用错误报告会触发意外的文件结束警告
另外,在PDO中,不应该有任何空格
"sqlsrv:server=$serverName ; Database=systems_requests"
可能是一个促成因素;移除它们
"sqlsrv:server=$serverName;Database=systems_requests"
添加到文件的顶部,这将有助于查找错误
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
就你而言:
$query = "select * from requests where comments like '%" . $var1 . "%'";
$stmt = sqlsrv_query( $db, $query );
您还需要对POST数组使用条件语句
即:
if(!empty($_POST['var1'])){
$var1 = $_POST['var1'];
}
重写:
请避免提供您的实际凭证。你遇到了什么错误?你真的只是在互联网上发布了你数据库的用户名和密码吗?啊,在那里status='Received'像:search-@SeanLange:这不是很有用,因为提供的IP无论如何都在一个私有块中。你发布的查询没有任何意义。您有一个带有单个搜索谓词的where子句。那你就好像被扔进去了。您需要包括和searchvalueI get error之类的列意外语法?我正试图掌握如何搜索整个表,但无法找到它。雪人认为您缺少了一个和在[columnName]之前。这与原始查询的问题完全相同。语法不正确。修复了oops。我用a?替换:搜索可能有点不对劲@唐尼。。。我不知道有没有一种方法可以做到这一点,而不必为您可以搜索的每一列生成一系列OR子句。我不认为有一种通配符方法可以跨列使用。我从一开始就试图告诉他,希望他能用我提供的链接来教他们,而不是突然给出答案。但是OP越来越困惑了。很多时候,尤其是在一些新事物中,在尝试了几次之后,看到它真正起作用,这有助于理解是的,我在我的例子中犯了一个错误,我们有时都会犯错;我走得太快了。然而,我的链接应该为他们提供正确的语法来使用。这些不可能是错的-我不知道为什么会被否决。OP一直在为查询的语法而挣扎,这至少在语法上是正确的。无论什么这个地方有时候太挑剔了。@Fred ii-把我算在第三名……但主要是作为一个旁观者。我修改了整个代码,在编辑部分我可以得到页面,但无法获取数据now@Donny我做了一些编辑。我做了一些更改。我得到了不同的错误。一个无效的参数被传递到sqlsrv_查询。@Donny重载我的回答并在“重写”下查看。如果这不起作用,我会非常困惑。我在查询准备/执行过程中仍然会遇到这个错误。数组[0]=>Array[0]=>IMSSP[SQLSTATE]=>IMSSP[1]=>-14[代码]=>-14[2]=>向sqlsrv\U查询传递了无效参数。[消息]=>向sqlsrv_查询传递了无效参数。我也有点难堪
if(!empty($_POST['var1'])){
$var1 = $_POST['var1'];
}
<?php
require_once("../includes/db_connect.php");
if(!empty($_POST['var1'])){
$var1 = $_POST['var1'];
}
else{ echo "It is empty."; exit; }
$query = "select * from requests where comments like '%".$var1."%'";
$stmt = sqlsrv_query( $db, $query );
if( $stmt === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
echo 'Id: '.$row['id'];
echo '<br/> name: '.$row['name'];
echo '<br/> lanId: '.$row['lanId'];
echo '<br/> comments: '.$row['comments'];
}
?>