首页;支持;通过PHP + MySQL保存到本地数据库[教程]

$link = mysql_connect($databaseHost, $databaseUser, $databasePassword);//创建数据库连接

这部分代码检查上面指定的数据库名是否已经存在于您的mysql服务器上,如果它没有创建它,以及一个新闻文章表:

//如果数据库不存在,则创建它
如果(@mysql_select_db($数据库名)= = false) {
$query = "CREATE DATABASE $databaseName";
if(!mysql_query($query))die("Error in query: $query");//如果无法创建数据库,则退出脚本
//在数据库中创建一个新闻文章表
$query = "CREATE TABLE $databaseName. "“NewsArticles”(
' id ' int(10) unsigned NOT NULL,
' title ' varchar(255) NOT NULL,
' text ' text NOT NULL,
' publishedDate ' datetime NOT NULL,
“photoURL”文本为空,
主键(id))
引擎= InnoDB默认字符集= latin1;中的一个”;
if(!mysql_query($query))die("Error in query: $query");//如果不能创建表,则退出脚本
mysql_select_db($数据库名);

代码的最后一部分用于迭代feed返回的所有新闻条目,并将它们保存到数据库中:

$feed = new ApiHandler($API_Key, $baseUrl);//使用Api_Key创建一个新的feed对象
$ newsList = $ feed - > getNewsHTML ();//返回一个HTML格式的提要最新新闻条目数组

foreach (newsList美元美元新闻){
/* @var $news NewsItem */

//为数据库准备不安全数据
(标题= mysql_escape_string美元新闻- > getHeadline ());
(文本= mysql_escape_string美元新闻- > getText ());
//选择默认照片并返回largeURL
照片=新闻- >美元getPhotos ();
(photoURL = mysql_escape_string美元照片[0]- > getLarge()——> getUrl ());

//将article插入数据库,但如果它已经存在则忽略它
$query = "INSERT IGNORE INTO NewsArticles .
值(”。新闻- > getId()美元。”,’”。标题美元。“”、“”。美元的文本。”
’”。新闻- > getPublishDate()。“”、“”。photoURL美元。“”)”;
if(!mysql_query($query))echo("Error in query: $query");


mysql_close(链接);/ /关闭数据库连接
回声”操作完成”;

跳转到上

先进的例子

在开始之前,有必要创建一个MySQL数据库,其中包含所有需要记录的表和提要。请参考先进的数据库结构

使用PHP API保存到新创建的数据库中

为了更容易解释,下面的脚本被分成了几部分。但应该复制到一个脚本。

提要配置

代码的第一部分用来配置你的feed设置,这些是你的API_Key和base url,它们是在你的欢迎包中发给你的。将下面给出的示例值替换为给出的详细信息是很重要的。

< html >
<头> < / >头
身体< >
<?php
include_once SampleFeedAPI / ApiHandler.php ';

成功= true;美元//初始化成功的操作Boolean
美元API_Key = " your_api_key”;//将API键插入到这个变量中
$ baseUrl =“your_api_base_url”;//将base插入到这个变量中

跳转到上

数据库配置

下一节需要您配置您的数据库设置,就像上面的示例设置需要替换为适合您的MySQL配置的值一样,但是databaseName应该保持不变,除非您在初始化时修改了这个名称高级数据库创建脚本

/ /数据库配置
$ databaseHost =“yoursqlserver”;
$ databaseUser =“根”;
美元databasePassword = " ";
$数据库名=“AdvancedSampleDB”;

$link = mysql_connect($databaseHost, $databaseUser, $databasePassword);
mysql_select_db($databaseName)或die("无法找到数据库");

跳转到上

从你的Feed中获取新闻网站

代码部分使用示例API返回一个newsItems数组。ApiHandler类是使用上面提供的API_Key和baseUrl值实例化的,如果值不正确,将抛出一个异常,脚本将退出,并带有详细说明异常的消息。

数组$ niList = ();
尝试{
$feed = new ApiHandler($API_Key, $baseUrl);//使用Api_Key创建一个新的feed对象
$ niList = $ feed - > getNewsHTML ();//返回一个HTML格式的提要最新新闻条目数组

捕获(异常$ e) {
死($ e);

跳转到上

处理每个新闻项并为数据库准备值

每个与newsItem关联的变量都为mysql查询做了准备,通过转义任何特殊字符并使它们对查询安全。我们还将更新和插入的计数器初始化为0,我们使用它来跟踪有多少文章被更新和有多少文章被插入。我们捕获每个newsitem抛出的任何异常,并跳过在catch块中高亮显示的特定项的处理。

/ /初始化计数器
美元更新= 0;
插入美元= 0;

//处理新闻
foreach (niList美元美元新闻){
/* @var $news NewsItem */
尝试{
美元$编码= mysql_real_escape_string(新闻- > getEncoding ());
(标题= mysql_real_escape_string美元新闻- > getHeadline ());
美元$ id = mysql_real_escape_string(新闻- > getId ());
$ publishDate = mysql_real_escape_string(新闻- >美元getPublishDate ());
$ createdDate = mysql_real_escape_string(新闻- >美元getCreatedDate ());
$ lastModifiedDate = mysql_real_escape_string(新闻- >美元getLastModifiedDate ());
提取美元= mysql_real_escape_string(新闻- > getExtract ());
文本美元= mysql_real_escape_string(新闻- > getText ());
(署名= mysql_real_escape_string美元新闻- > getByLine ());
$源= mysql_real_escape_string(新闻- >美元getSource ());
$ tweetText = mysql_real_escape_string(新闻- >美元getTweetText ());
$源= mysql_real_escape_string(新闻- >美元getSource ());
$状态= mysql_real_escape_string(新闻- >美元getState ());
$ clientQuote = mysql_real_escape_string(新闻- >美元getClientQuote ());
$ htmlTitle = mysql_real_escape_string(新闻- >美元getHtmlTitle ());
$ htmlMetaDescription = mysql_real_escape_string(新闻- >美元getHtmlMetaDescription ());
$ htmlMetaKeywords = mysql_real_escape_string(新闻- >美元getHtmlMetaKeywords ());
$ htmlMetaLanguage = mysql_real_escape_string(新闻- >美元getHtmlMetaLanguage ());
(标签= mysql_real_escape_string美元新闻- > getTags ());
(优先级= is_int美元新闻- > getPriority ()) ?新闻- > getPriority():“零”;
美元$ format = mysql_real_escape_string(新闻- > getFormat ());;

类别=新闻- >美元getCategories ();
照片=新闻- >美元getPhotos ();
评论=新闻- >美元getComments ();

捕获(异常$ e) {
echo $ e;
继续;

跳转到上

更新操作条

执行一个查询来检查如果newsarticle已经存在于数据库获取id,如果真的那么我们内部流程更新查询如果阻止否则我们跳过整个块和其他去阻止我们执行INSERT查询。如果查询成功,更新计数器增加1。

//如果运行更新查询或插入查询,则检查新闻文章是否已经存在于数据库中
$query = "Select * FROM NewsArticles WHERE id = "。$ id;
如果(mysql_num_rows (mysql_query(查询美元))){

$query = "UPDATE NewsArticles .
SET headline = '”。$headline ."', extract = '"。提取美元。””,
编码= ' '"。$encoding ."', text = '" ."$text ."', publishDate = '".$publishDate."',
Byline = '"。$byline ."', tweetText = '"。$tweetText ."', source = '" . $tweetText ."$源。“
State = ' '"。$state ."', clientQuote = '" ."clientQuote美元。””,
createdDate = '”。createdDate美元。“”,lastModifiedDate ='".$lastModifiedDate."',
htmlTitle = '"。$htmlTitle ."', htmlmetdescription = '"。htmlMetaDescription美元。””,
htmlMetaKeywords = '"。$htmlMetaKeywords ."', htmlMetaLangauge = '"。htmlMetaLanguage美元。””,
标签= ' '"。美元的标记。“”,priority = " . $priority ."
,格式= '"。美元格式。”
WHERE id = $id ";
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);

其他美元更新+ +;

为了简单起见,部分更新还涉及到删除相关的照片和注释,因为它们会在以后的方法调用中重新添加。然而,对于类别,只有与新闻文章的关系被删除,这与前面提到的方法调用一样,会在以后的方法调用中重新添加。

//检查照片是否已经存在于数据库中,如果他们确实删除了他们,因为他们将在initialisphotoquery方法中重新添加
$subQuery = "(SELECT newshotoid FROM NewsArticlePhotos . name . "
newsArticleID = "的地方。$ id。“)”;
如果(mysql_num_rows (mysql_query(子查询美元))){
$query = "删除新闻图片
WHERE id IN ".$subQuery;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);



//删除与本文相关的所有类别关系,因为将在initialeCategoryQuery方法中重新添加
$query = "DELETE FROM NewsArticleCategories .
newsArticleID = "的地方。$ id;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


//删除本文的所有注释,因为将在intiliaseCommentsQuery中重新添加
$subQuery = "(SELECT newsCommentID FROM NewsArticleComments . "
newsArticleID = "的地方。$ id。“)”;
如果(mysql_num_rows (mysql_query(子查询美元))){
$query = "DELETE FROM NewsComments .
WHERE id IN ".$subQuery;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


跳转到上

处理每个新闻项并为数据库准备值

如果一篇文章不存在,那么else块中的这部分代码将被处理,这只是一个简单的mysql插入语句,如果成功,插入计数器增加1,如果不成功,查询将回显到页面。

其他的

$query = "INSERT INTO NewsArticles .
值(“$ id”。,’”。标题美元。“”、“”。提取美元。””,
’”。编码美元。“”、“”。文本美元。“”、“”。publishDate美元。“”,
’”。署名美元。“”、“”。tweetText美元。“”、“”。美元的来源。“”,
’”。美元的状态。“”、“”。clientQuote美元。“”、“”。createdDate美元。“”,
’”。lastModifiedDate美元。“”、“”。htmlTitle美元。“”、“”。htmlMetaDescription美元。“”,
’”。htmlMetaKeywords美元。“”、“”。htmlMetaLanguage美元。“”、“”。美元的标记。“”,
”。优先级美元。”,“美元格式。”)”;

如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);

其他插入美元+ +;

跳转到上

处理每个新闻项并为数据库准备值

foreach循环中的最后一个操作适用于UPDATES和INSERTS,并调用3个方法,这些方法处理对数据库的照片、类别和注释的处理,每个方法将在下面的页面中进行更详细的讨论:

//对数据库执行照片类别和注释更新
initialisePhotoQuery(照片、身份证美元);
initialiseCategoryQuery(类别id美元);
initialiseCommentsQuery(评论,美元id);

跳转到上

检查操作是否成功并关闭数据库连接

这部分代码用于显示成功更新和插入的文章数量和任何错误(如果有任何错误):

if ($success)echo "Operation completed successfully: $updated Articles updated, $inserted Articles inserted "; / /执行成功
else echo "有一个问题,保存所有的新闻文章到数据库,见错误以上- $updated articles updated, $inserted articles inserted ";
mysql_close(链接);

跳转到上

照片处理方法

此方法用于将与某一文章关联的所有照片信息添加到照片表中,并在相关数据库表中建立文章和照片关系,同时,与某一照片关联的所有变量值也都被安全地转义以供查询。

//将图片及其与新闻文章的关系添加到数据库中
函数initialisePhotoQuery (photoArray美元$ id) {
查询美元= " ";
foreach ($photoArray as $Photo){
/* @var $Photo Photo */
美元alt = mysql_real_escape_string(照片- > getAlt ());
$ photoID = mysql_real_escape_string(照片- > getId()美元);

(largeUrl =美元照片- > getLarge()——> getUrl() ! =“零”)?””“.mysql_real_escape_string(照片- > getLarge()——> getUrl())”。“”:“零”;
美元largeHeight = mysql_real_escape_string(照片- > getLarge() - >获得());
美元largeWidth = mysql_real_escape_string(照片- > getLarge()——> getWidth ());

(thumbUrl =美元照片- > getThumb()——> getUrl () != "零")吗?”“.mysql_real_escape_string(照片- > getThumb()——> getUrl())”。“”:“零”;
美元thumbHeight = mysql_real_escape_string(照片- > getThumb() - >获得());
美元thumbWidth = mysql_real_escape_string(照片- > getThumb()——> getWidth ());

(hiResUrl =美元照片- > getHiRes()——> getUrl () != "零")吗?”“.mysql_real_escape_string(照片- > getHiRes()——> getUrl())”。“”:“零”;
美元hiResHeight = mysql_real_escape_string(照片- > getHiRes() - >获得());
美元hiResWidth = mysql_real_escape_string(照片- > getHiRes()——> getWidth ());

(customUrl =美元照片- > getCustom()——> getUrl () != "零")吗?”“.mysql_real_escape_string(照片- > getCustom()——> getUrl())”。“”:“零”;
美元customHeight = mysql_real_escape_string(照片- > getCustom() - >获得());
美元customWidth = mysql_real_escape_string(照片- > getCustom()——> getWidth ());

取向美元= mysql_real_escape_string(照片- > getOrientation ());

$query =" SELECT id FROM新闻图片WHERE id ="。photoID美元;
如果(! mysql_num_rows (mysql_query(查询)美元)){
$query = "INSERT INTO NewsPhotos Values(".$photoID.",'" .");alt美元。“”、“”。$取向。”
”。thumbWidth美元。“,”。thumbHeight美元。“,”。thumbUrl美元。“,”。largeWidth美元。”
”。largeHeight美元。“,”。largeUrl美元。“,”。hiResWidth美元。“,”。hiResHeight美元。",
”。hiResUrl美元。“,”。customWidth美元。“,”。customHeight美元。“,”。customUrl美元。“)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


$query = "INSERT INTO NewsArticlePhotos(newsArticleID, newshotoid) VALUES (" . ", " . ");$ id。“,”。photoID美元。“)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


跳转到上

类别处理方法

这个方法是用来与一篇文章有关的所有类别的信息添加到类别表,如果它不存在,而且它建立文章以及相关的类别关系数据库表与类别相关的所有变量的值都为查询安全逃脱了。

//将类别及其与新闻文章的关系添加到数据库中
函数initialiseCategoryQuery (categoryArray美元$ id) {
查询美元= " ";
foreach ($categoryArray as $cat){
/* @var $cat Category */
美元的categoryID = mysql_real_escape_string(猫- > getID ());
美元categoryName = mysql_real_escape_string(猫- > getName ());
$query = "Select * FROM NewsCategories WHERE id = "。美元被标记;
如果(! mysql_num_rows (mysql_query(查询)美元)){
$query = "INSERT INTO NewsCategories Values(".$categoryID.",'") .", ". ", ". ", ". "categoryName美元。“”)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


$query = "INSERT INTO NewsArticleCategories(newsarticlid, newsCategoryID) VALUES (" . $query = " " . $query = " " . $query = "$ id。“,”。美元被标记。“)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


跳转到上

评论处理方法

该方法用于将与某一文章相关的所有评论信息添加到评论表中,并在相关数据库表中建立文章和评论关系。此外,与注释关联的所有变量值都可以安全地转义到查询中。

//将注释及其与新闻文章的关系添加到数据库中
函数initialiseCommentsQuery (commentsArray美元$ id) {

foreach ($commentsArray as $comment){
/* @var $comment注释*/

$ commentID = mysql_real_escape_string(评论- > getID()美元);
美元commentUser = mysql_real_escape_string(评论- > getUser ());
美元commentPostDate = mysql_real_escape_string(评论- > getPostDate ());
美元commentLocation = mysql_real_escape_string(评论- > getLocation ());

$query = "INSERT INTO NewsComments Values(".$commentID.",'" .");commentUser美元。“”、“”。commentPostDate美元。“”,
’”。commentLocation美元。“”)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);


$query = "INSERT INTO NewsComments(newsArticleID, newsCommentid) VALUES (" . ");$ id。“,”。commentID美元。“)”;
如果(! mysql_query(查询美元)){
全球美元成功;
成功= false;美元
echo("错误查询:"。美元的查询。“< br / > < br / >”);



? >
< /身体>
< / html >

跳转到上