我正在重建我当前的脚本以支持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();
}
}
?>
答案 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();
}
永远不要这样做。它不仅向最终用户公开内部信息,而且还让您的程序继续运行,就好像什么也没发生一样。
开发时,让异常无法处理,从而终止执行。在生产中,实现一个高级异常处理程序,可以在向用户显示友好错误消息时记录和/或通知您问题。