【问题标题】:SQL error when trying to update record in a database using PDO [duplicate]尝试使用 PDO 更新数据库中的记录时出现 SQL 错误 [重复]
【发布时间】:2017-12-05 22:58:03
【问题描述】:

尝试更新 SQL 数据库中的记录时出现以下错误...

图书未更新:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“Adobe AIR (Adobe Integrated Runtime) with Ajax: Visual QuickPro Guide, bookYear”附近使用正确的语法。

这是我的 updateBooks.php 文件代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>updateBook.php - updating a book record to a database using PDO</title>
</head>
<body>

<?php
// Retrieve variables
$bookISBN = filter_has_var(INPUT_GET, 'bookISBN') ? $_GET['bookISBN'] : null;
$bookTitle = filter_has_var(INPUT_GET, 'bookTitle') ? $_GET['bookTitle'] : null;
$bookYear = filter_has_var(INPUT_GET, 'bookYear') ? $_GET['bookYear'] : null;
$catID = filter_has_var(INPUT_GET, 'catID') ? $_GET['catID'] : null;
$bookPrice = filter_has_var(INPUT_GET, 'bookPrice') ? $_GET['bookPrice'] : null;

$errors = false;

if (empty($bookISBN)) {
    echo "<p>You need to have selected a book.</p>\n";
    $errors = true;
}
if (empty($bookTitle)) {
    echo "<p>You need to choose a title.</p>\n";
    $errors = true;
}
if (empty($bookYear)) {
    echo "<p>You need to choose a year.</p>\n";
    $errors = true;
}
if (empty($catID)) {
    echo "<p>You need to choose a category.</p>\n";
    $errors = true;
}
if (empty($bookPrice)) {
    echo "<p>You need to choose a price.</p>\n";
    $errors = true;
}
if ($errors === true) {
    echo "<p>Please try <a href='chooseBookList.php'>again</a>.</p>\n";
}
else {
    try {
        //connects to database
        require_once("functions.php");
        $dbConn = getConnection();
        $bookPrice = $dbConn->quote($bookPrice);

        $updateSQL = "UPDATE nbc_books SET bookTitle = $ $bookTitle, bookYear = $bookYear, catID = $catID, bookPrice = $bookPrice WHERE bookISBN = $bookISBN";
        $dbConn->exec($updateSQL);
        echo "<p>Book updated</p>\n";
    } catch (Exception $e) {
        echo "<p>Book not updated: " . $e->getMessage() . "</p>\n";
    }
}
?>
</body>
</html>

这是 bookQuery.php 文件的代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>bookQuery.php - retrieving data from a database using PDO</title>
</head>
<body>
<h1>All Books</h1>
<?php
try {
    require_once("functions.php");
    $dbConn = getConnection();

    $sqlQuery = "SELECT bookTitle, catDesc, pubName
                 FROM nbc_books
                 INNER JOIN nbc_category
                 ON nbc_category.catID = nbc_books.catID
                 INNER JOIN nbc_publisher
                 ON nbc_publisher.pubID = nbc_books.pubID
                 ORDER BY bookTitle";
    $queryResult = $dbConn->query($sqlQuery);

    while ($rowObj = $queryResult->fetchObject()) {
        echo "<div class='book'>\n
                   <span class='bookTitle'>{$rowObj->bookTitle}</span>\n
                   <span class='bookYear'>{$rowObj->bookYear}</span>\n
                   <span class='catID'>{$rowObj->catID}</span>\n
                   <span class='bookPrice'>{$rowObj->bookPrice}</span>\n
              </div>\n";
    }
}
catch (Exception $e){
    echo "<p>Query failed: ".$e->getMessage()."</p>\n";
}
?>

</body>
</html>

这也是表格的代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>editBookForm.php- script to display an edit form for the chosen book</title>
</head>
<body>
<?php
$bookISBN = filter_has_var(INPUT_GET, 'bookISBN') ? $_GET['bookISBN'] : null;


if (empty($bookISBN)) {
    echo "<p>Please <a href='chooseBookList.php'>choose</a> a book.</p>\n";
}
else {
    try {
        require_once("functions.php");
        $dbConn = getConnection();

        $sqlQuery = "SELECT bookISBN, bookTitle, bookYear,nbc_books.pubID, nbc_books.catID, bookPrice
                 FROM nbc_books
                 INNER JOIN nbc_category
                 ON nbc_category.catID = nbc_books.catID
                 INNER JOIN nbc_publisher
                 ON nbc_publisher.pubID = nbc_books.pubID
                 WHERE bookISBN = $bookISBN";
        $queryResult = $dbConn->query($sqlQuery);

        $rowObj = $queryResult->fetchObject();

        echo "
        <h1>Update '{$rowObj->bookTitle}'</h1>
        <form id='UpdateBook' action='updateBook.php' method='get'>
            <p>Book ISBN <input type='text' name='bookISBN' value='$bookISBN' readonly /></p>
            <p>Book Title <input type='text' name='bookTitle' size='50' value='{$rowObj->bookTitle}' /></p>
            <p>Book Year <input type='text' name='bookYear' size='10' value='{$rowObj->bookYear}' /></p>
            <p>Book Category <input type='text' name='catID' value='{$rowObj->catID}' /></p>
            <p>Book Price <input type='text' name='bookPrice' size='10' value='{$rowObj->bookPrice}' /></p>
            <br />

            <p><input type='submit' name='submit' value='Update Book'></p>
        </form>
        ";
    }
    catch (Exception $e){
        echo "<p>Book details not found: ".$e->getMessage()."</p>\n";
    }
}
?>
</body>
</html>

【问题讨论】:

  • 请发布您的代码,以便我们查看问题所在。
  • 当您不熟悉 SQL 字符串引用语法时,参数绑定也会有所帮助。
  • escape your variables in your queries...准备、绑定和执行您的查询。

标签: php sql pdo


【解决方案1】:

您的查询语法无效:

$updateSQL = "UPDATE nbc_books SET bookTitle = $ $bookTitle, bookYear = $bookYear, catID = $catID, bookPrice = $bookPrice WHERE bookISBN = $bookISBN";

特别是。这部分:$ $bookTitle。删除多余的$

【讨论】:

  • 删除多余的 $ 后,我仍然得到同样的错误
  • 除了实际更新之外,每个过程都有效,我似乎无法弄清楚查询的错误是什么。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多