我是PHP新手,但我一直都在学习,但我也知道我有很多需要学习的东西,所以对我很轻松。
我目前正在编写一个分类广告脚本,虽然代码严格过时,但在我开始清理它之前情况要糟糕得多,现在我只是想让分类广告再次稳定,然后我打算继续返回并将事物更新为更现代的语言(PDO)但是现在我对于从哪里开始没有任何想法(并且不想在学习HTML,CSS,PHP和JS的同时无法阅读几个月)
下面的代码最初显示了从(tt_%s)获取数据的表格中的标题列,但我已经修改了将数据插入数据库的表格,所以现在不再有“标题”列在它的位置现在有一个表和一个表的制造商和另一个表的制造商,但这是我感到困惑的地方,我正在寻求帮助。
目前这正是我所看到的; (代码下面我会解释更多)
<?php
echo "<div class='mostPopular'>";
echo "Popular<br>Listings";
$node = new sqlNode();
$node->table = "types";
$node->select = "ID";
$node->orderby = "ORDER BY rand()";
if(($typeRS = $mysql->select($node)) === false )
die('Unable to Retrieve Ad Type');
$sql = array();
$typeID = 0;
while( $adType = mysql_fetch_assoc($typeRS) ){
$typeID = sprintf("`tt_%s`", abs(intval($adType['ID'])));
$sql[] = sprintf("SELECT %s.Year, %s.Hits, %s.CategoryID, %s.ID, CONCAT('','%s') AS TypeID FROM %s WHERE (`ExpireDate` > NOW()) ",
$typeID,
$typeID,
$typeID,
$typeID,
intval($adType['ID']),
$typeID);
}
$sqlStr = @implode("union ",$sql);
$sqlStr .= " ORDER BY Hits DESC LIMIT 5";
if(($adRS = $mysql->exSql($sqlStr)) === false)
die('Unable to Retrieve Most Popular Ads');
while( $ad = mysql_fetch_assoc($adRS) ){
echo "<p>";
echo "<a href='detail.php?fatherID=".$ad['CategoryID']."&TypeID=".$ad['TypeID']."&ListingID=".$ad['ID']."'>";
echo $ad['Title'];
echo "</a>";
echo "</p>";
}
echo "</div>";
?>
首先,我不知道什么是CONCAT('','%s'),我也不知道$ sqlStr = @implode(“union”,$ sql);就是这样。
除了这些问题,考虑到这段代码已经过时,我应该切换到PDO,我希望有人可以告诉我如何使用PDO执行这些查询,因为我可以通过示例学习并应用相同的程序整个网站的其他查询。
如果有人不介意与我交谈,以至于我可以用PDO执行相同的结果,我会非常感激,并且在我急切等待你的回复时我提前感谢你们。
BTW,我在研究了过去几个月可以找到的每个PHP和MySql教程之后问这个问题
由于
答案 0 :(得分:0)
虽然“请将此代码重写为PDO”过于本地化,但您遇到的实际问题需要不同的解决方案。
首先,您需要修复数据库架构。这很糟糕。
过早优化,是所有邪恶的根源,使你从正确的方向堕落。如果要将它们联合起来,将数据分成小块是毫无意义的。
广告必须包含一个表格 它将使所有这些代码都过时,只留下一个常规查询,可以在一个传统的PDO调用中运行。
接下来,这段代码是由一些sprintf()疯子编写的,他们让它过于复杂。事实上,这里真的不需要一个sprintf()。
$sql = array();
while( $row = mysql_fetch_assoc($typeRS) ){
$typeID = abs($row['ID']);
$sql[] = "SELECT Year, Hits, CategoryID, ID, '$typeID' AS TypeID
FROM tt_$typeID WHERE ExpireDate > NOW()";
}
$sqlStr = implode("union ",$sql)." ORDER BY Hits DESC LIMIT 5"
就够了。
但同样,不需要这个联合查询。所有内容都必须通过单一普通查询执行,如此
SELECT Year, Hits, CategoryID, ID, TypeID FROM ads ORDER BY Hits DESC LIMIT 5
您无疑将能够使用您拥有的任何PDO示例运行