PDO插入查询不起作用

时间:2013-12-23 23:22:03

标签: php sql pdo insert

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

谷歌了一下但找不到任何东西。

                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();
                }
            } 
            ?>

1 个答案:

答案 0 :(得分: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();        
}

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

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