Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索功能不适用于我的php应用程序。我总是遇到语法错误_Php_Sql Server_Pdo - Fatal编程技术网

搜索功能不适用于我的php应用程序。我总是遇到语法错误

搜索功能不适用于我的php应用程序。我总是遇到语法错误,php,sql-server,pdo,Php,Sql Server,Pdo,为了让搜索功能正常工作,我一直遇到语法错误,不确定我一开始是否做对了。我有几个列id、name、status、lanId和comments,这个表称为requests。只是需要一点帮助来解决这个问题。我不认为搜索这个词是正确的,我在那里。我只是不知道如何为我的应用程序创建搜索功能 <html> <head> </head> <body> <form name="frmSearch" method="post

为了让搜索功能正常工作,我一直遇到语法错误,不确定我一开始是否做对了。我有几个列id、name、status、lanId和comments,这个表称为requests。只是需要一点帮助来解决这个问题。我不认为搜索这个词是正确的,我在那里。我只是不知道如何为我的应用程序创建搜索功能

  <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'];

}


?>