【问题标题】:Uncaught exception 'PDOException' with message 'SQLSTATE[08P01]带有消息“SQLSTATE [08P01]”的未捕获异常“PDOException”
【发布时间】:2014-11-15 14:23:38
【问题描述】:

你好,所以我正在尝试为一个带有 PDO 和 PSQL 的网站创建一个 search.php 文件,我对这一切都很陌生,所以我收到了这个错误

    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

我不明白为什么,我不知道该怎么做...如果有人可以帮助我 这是 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>

【问题讨论】:

    标签: php postgresql pdo psql


    【解决方案1】:

    错误消息准确地告诉您问题所在。您的查询有 1 个绑定参数,但您没有将任何值绑定到它。试试这样的:

    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,因此请务必检查这些选项并使用对您最有意义的选项。

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多