尝试使搜索功能正常工作我不断得到语法错误,不确定我是否正确地开始使用。我有几列id,名称,状态,lanId和注释该表称为请求。只需要一些帮助就可以搞清楚。我不认为搜索这个词在我那里是正确的。我只是不明白如何为我的应用程序创建搜索功能。
--master
好的,所以我稍微改了一下页面显示但现在我得到一个errorsqlsrv_fetch_array()期望参数1是资源,给定空值
<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>
答案 0 :(得分:4)
除了在评论和Sean的答案中使用WHERE
和LIKE
的方式已经说过的话,我还要补充一下这个答案:
您的catch
缺少其右括号
catch(Exception $e)
{
die( print_r( $e->getMessage() ) );
}
^ added
使用错误报告会触发意外的文件结束警告。
另外,在PDO中,不应该有任何空格
"sqlsrv:server=$serverName ; Database=systems_requests"
可能是一个促成因素;删除它们。
"sqlsrv:server=$serverName;Database=systems_requests"
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
参考文献:
您的查询需要AND
或OR
以及该列,具体取决于搜索条件。
但是,我不确定您使用PDO::PARAM_INT
,如果您的搜索是字符串,则会失败。
阅读手册:
手册中的示例:
$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
echo $row['LastName'].", ".$row['FirstName']."<br />";
}
在你的情况下:
$query = "select * from requests where comments like '%" . $var1 . "%'";
$stmt = sqlsrv_query( $db, $query );
您还需要为POST数组使用条件语句。
I.e。:
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'];
}
?>
答案 1 :(得分:0)
你的选择不应该更像:
$query = "SELECT * FROM requests WHERE status='Received' and [columnName] LIKE ?";
$stmt = $db->prepare($query);
$stmt->bindValue(?, '%' . $var1 . '%', PDO::PARAM_INT);
如果没有这个,查询就无法知道您要搜索的是哪个列。
答案 2 :(得分:0)
出于某种原因,有几个人很难在这里搞清楚这个问题。这将是现在在语法上正确的查询。我不知道您要在搜索中包含哪个列,但是使用您的实际列名更改SomeColumn,这应该在那里。
$query = "SELECT * FROM requests WHERE status='Received' AND SomeColumn LIKE :search";