2014-09-21 641 views
1

你好,所以我想为一个网站whith PDO和PSQL做一个search.php文件,我是种新的所有这一切,所以我得到这个错误未知的异常'PDOException'与消息'SQLSTATE [08P01]

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000001" requires 1' in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php:45 Stack trace: #0 C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php(45): PDO->query('SELECT * FROM b...') #1 {main} thrown in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php on line 45 

,我不明白为什么,我必须做什么......如果有人可以帮助我 这没有IDEIA是的search.php文件:

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 
    include '/database/dbc.php'; 
    //$sesion_type = $_GET['search']; 
    $dbc = dbc(); 

     $search = $_POST['q'];  
?> 
<!DOCTYPE html> 
<html> 
    <head> 
      <title>Library</title> 
      <link rel="stylesheet" type="text/css" href="css/style.css"/> 
      <link rel="icon" href="images/biblioteca1.jpg"/> 
    </head> 

    <body> 
     <div id="container"> 
      <div id="header"> 
       <h2>Search</h2> 
      </div> 
      <div id="menu"> 
       <ul> 
        <li><a href="index.php">Home</a></li> 
       </ul> 
       <div id="tfheader"> 
        <form id="tfnewsearch" method="get" action="http://localhost:8080/Library/search.php"> 
        <input type="text" class="tftextinput" name="q" size="21" maxlength="120"><input type="submit" value="search" class="tfbutton"> 
        </form> 
       <div class="tfclear"></div> 
       </div> 

      </div> 
      <div id="content"> 
      <?php 
      try 
      { 
       $quer1 = "SELECT * FROM books WHERE title LIKE :search OR author LIKE :search OR genre LIKE :search OR editor LIKE :search"; 
      } 
      catch(PDOException $e) 
      { 
      echo $e->getMessage(); 
      } 
      foreach($dbc->query($quer1) as $row) 
      { 
      ?> 
       <td><?php echo($row['title']);?></td> 
       <td><?php echo($row['author']);?></td> 
       <td><?php echo($row['editor']);?></td> 
       <td><?php echo($row['price']);?></td> 
       <td><?php echo($row['genre']);?></td> 
       <td><?php echo($row['bookid']);?></td> 
      <?php 
      } 
      ?> 
      </div> 
      <div id="footer"> 
      </div> 
     </div> 
    </body> 
</html> 

回答

2

该错误消息告诉你到底是什么问题。你的查询有一个绑定参数,但你没有绑定任何值。尝试是这样的:

try { 
    $quer1 = "SELECT * FROM books WHERE title LIKE :search OR author LIKE :search OR genre LIKE :search OR editor LIKE :search"; 
    $sth = $dbc->prepare($quer1); 
    $sth->bindParam(':search', $search); 
    $sth->execute(); 

    while($row = $sth->fetch()) { 
     // ... 
    } 

} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

又见了bindParam手工录入的例子。请注意,我还在try区块内封装了整个操作。在你的例子中,它唯一的内容是一个字符串变量的分配,这是毫无意义的,因为分配一个字符串永远不会抛出异常。

您也可以直接调用里面的参数绑定到你的查询execute

$sth->execute(array(':search' => $search)); 

还有几个不同的选项,你可以在传递给fetch method,并有一对夫妇不同fetch methods的你可以电话,所以一定要检查出来,并使用最有意义的东西。

+0

它的工作原理!谢谢你:D – Alex 2014-09-21 14:47:51

+0

np,很高兴提供帮助 – 2014-09-21 14:48:44

相关问题