【问题标题】:PDO Insert query not working [duplicate]PDO插入查询不起作用[重复]
【发布时间】:2014-01-12 05:06:43
【问题描述】:

我正在重建我当前的脚本以支持 PDO 而不是 MySQL 查询。我被困在这个插入查询上,它没有执行,我不知道为什么。

Google 搜索了一下,但没有找到任何东西。

                try 
                {
                    $sql = "INSERT INTO
                                news (news_name,
                                    news_description,
                                    news_author,
                                    news_date,
                                    news_link,
                                    news_category)
                            VALUES ('" . trim($_POST['news_name']) . "',
                                '" . trim($_POST['news_description']) . "',
                                " . $_SESSION['admin_id'] . ",
                                NOW(),
                                '" . trim($_POST['news_link']) . "',
                                '" . trim($_POST['news_category']) . "'
                                )";
                    $results = $db->exec($sql);
                    $id = $db->lastInsertId();

                    if($results)
                    {
                        echo $id;
                        echo '<p>News item added succesfully</p>';
                        echo '<a href="admin.php">Click here to return to the admin panel</a>';                     
                    }
                } 
                catch(PDOException $e)
                {
                    echo $e->getMessage();
                }
            } 
            ?>

【问题讨论】:

标签: php sql pdo insert


【解决方案1】:

首先,将 PDO 设置为在遇到错误时抛出异常(如果您还没有...

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

现在,准备一个带有参数的INSERT 语句

$sql = <<<_SQL
INSERT INTO `news` (news_name, news_description, news_author,
                    news_date, news_link, news_category)
VALUES (:name, :description, :author_id, NOW(), :link, :category)
_SQL;
$stmt = $db->prepare($sql);

然后用你的值执行它

$stmt->execute([ // PHP 5.4 short array syntax, use array(...) if not available
    ':name'        => trim($_POST['news_name']),
    ':description' => trim($_POST['news_description']),
    ':author_id'   => $_SESSION['admin_id'],
    ':link'        => trim($_POST['news_link']),
    ':category'    => trim($_POST['news_category'])
]);

最后……

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

永远不要这样做。它不仅向最终用户公开内部信息,而且让您的程序继续运行,就好像什么都没发生一样。

开发时,让异常不处理,从而终止执行。在生产环境中,实现一个高级异常处理程序,该处理程序可以记录和/或通知您问题,同时向用户显示友好的错误消息。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多