警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未定义?

时间:2015-01-25 11:07:51

标签: php pdo

我正在尝试将输入页面“addbook.php”中的数据发送到将其发送到我的数据库的插件页“postbook.php”。

我是PHP的新手,但我现在正在学习它。所以现在已经尝试了数百次才能使这个工作,但我总是遇到问题......

PHP / PDO - postbook.php

<?php
    # pdo options/attributes
    $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION );
    # data source name
    $dsn = "mysql:host=localhost;dbname=book";
    # basic pdo connection (with added option for error handling)
    if ($_SERVER['REQUEST_METHOD'] == "POST") {

            try {
                $dbh = new PDO('mysql:host=localhost;dbname=book', 'root', '');
                $stmt = $dbh->prepare("INSERT INTO English books VALUES :English title");
                $arrayName = array(':English title' => $_POST['Etitle']);


                $result = $stmt->execute($arrayName);

                if($result) {
                    echo "<p>Data submitted successfully!</p>";
                }

            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            echo "<p>Successfully connected!</p>";
        }
   # close the connection  
    $DBH = null;

?>

HTML /输入 - addbook.php

<form action="postbook.php" method="post" />
<p>English title: <input type="text" name="Etitle" /></p>
<input type="submit" value="submit"/>

1 个答案:

答案 0 :(得分:0)

:English title不是有效的占位符名称。 PDO / SQL无法区分您是指一个占位符:English后跟关键字title(这是通常的SQL语法,它是如何解释的,并且语法无效),或者你的意思是指中间有空格的占位符。

您必须为占位符:englishTitle或类似名称命名,没有空格。您的表名也是如此。

您还缺少括号:

INSERT INTO english_books VALUES (:englishTitle)