更新2 - 我设法做到这一点通过使用子查询,而不是有一个$ config变量与每个数字我添加一行到我的articles_category表有1或0,如果它包括1个像这样:pdo mysql php循环只返回1行
$db->sqlquery("SELECT a . * , c.`category_name`
FROM `articles` a
LEFT JOIN `articles_categorys` c ON c.`category_id` = a.`category_id`
WHERE a.`active` =1
AND a.`category_id`
IN (
(
SELECT `category_id`
FROM `articles_categorys`
WHERE `show_in_rss` =1
)
)
ORDER BY a.`date` DESC
LIMIT ?", array($limit));
UPDATE1 - 我有一个部分的解决方案,我需要与第二位帮助(我甚至不知道这是怎么回事关于它的正确方法,但它的驾驶我坚果)。
如果我这样做;
$category_array = explode(',', $config['article_rss_categorys']);
$in_sql = '';
$counter = 0;
// count how many there are
foreach($category_array as $cat)
{
if ($counter == 0)
{
$in_sql .= '?';
}
else
{
$in_sql .= ',?';
}
$counter++;
}
我可以在IN()中放入“$ in_sql”给我个人?它的工作原理。现在我需要找到一种方法将每个数字从$ config ['article_rss_categorys']内部查询到第二部分?
ORIGINAL;
$ db是我的数据库类/连接(所有功能都在这个类中)。
好了,所以这里是我的查询:
$db->sqlquery("
SELECT a.*, c.`category_name`
FROM `articles` a LEFT JOIN `articles_categorys` c
ON c.`category_id` = a.`category_id`
WHERE a.`active` = 1
AND a.`category_id` IN (?)
ORDER BY a.`date`
DESC LIMIT ?", array($config['article_rss_categorys'], $limit)
);
我检查和$config['article_rss_categorys']
设置及其0,1,2,4,6,7
,也$limit
设置和它的15
。
这是我的查询代码(由$ db调用的mysql类中);
try
{
$this->STH = $this->database->prepare($sql);
foreach($objects as $k=>$p)
{
// +1 is needed as arrays start at 0 where as ? placeholders start at 1 in PDO
if(is_numeric($p))
{
$this->STH->bindValue($k+1, (int)$p, PDO::PARAM_INT);
}
else
{
$this->STH->bindValue($k+1, $p, PDO::PARAM_STR);
}
}
return $this->STH->execute();
$this->counter++;
}
catch (PDOException $e)
{
$core->message($e->getMessage());
}
我测试查询在phpMyAdmin用正确的东西替换?
和它的工作所以数据库是罚款。
然后我尝试取出并放出如此的结果;
while ($line = $db->fetch())
{
// make date human readable
$date = $core->format_date($line['date']);
$output .= "
<item>
<title>{$line['category_name']} > {$line['title']}</title>
<link>http://www.prxa.info/index.php?module=articles_comments&aid={$line['article_id']}</link>
<pubDate>{$date}</pubDate>
<guid>http://www.prxa.info/index.php?module=articles_comments&aid={$line['article_id']}</guid>
</item>";
}
这是我的提取代码(在由$ db调用的mysql类中);
public function fetch()
{
$this->STH->setFetchMode(PDO::FETCH_ASSOC);
return $this->STH->fetch();
}
它只返回一行,最后一行。它应该循环遍历它们,最多可达15个。
我不明白为什么它只能得到一个?
你尝试手动运行查询 - 只是为了确保它返回比1分的结果吗? – alfasin
@alfasin他写道,他在phpmyadmin中测试它。 – Barmar
yeps,错过了它... – alfasin