2013-03-08 64 views
0

林新的论坛,但希望有人能够给我一个手IM挣扎..PHP输出查询

我的代码如下,我出口从Zen Cart的数据库CSV文件

$products_cost = 
    "select p.products_id, pd.products_name, p.products_quantity, ". 
     "p.products_cost, (p.products_quantity*p.products_cost) AS products_total_cost, ". 
     "p.products_type ". 
    "from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd ". 
    "where p.products_id = pd.products_id and pd.language_id='" . $_SESSION['languages_id'] . "' ". 
    "order by (p.products_cost) DESC, p.products_cost desc, pd.products_name"; 

    $products_stock = $db->Execute($products_cost); 

//Start Of Output for Stock File 

$output = array();  
$output["tx_type"]='ST';   
$output["Stock_Code"]= $products_stock->fields['products_id']; 
$output["Qty"]= $products_stock->fields['products_quantity']; 
$output["Description"]= $products_stock->fields['products_name']; 
$output["CostPriceEx"]= $products_stock->fields['products_cost']; 
$output["TotalCostEx"]= $products_stock->fields['products_cost'] * $products_stock->fields['products_quantity']; 

zen_sages_fwrite($output); 

$stimer = microtime_float(); 

运行代码时,我得到如下的输出,但不显示数据库中的每个产品,它显示的是相同的?

ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 
ST,1149,10,350gsm A6 Glossy Postcards,290.0000,2900 

我曾尝试加入$products_stock->MoveNext();

但dosent缝有任何影响,

感谢大家提前

罗素

我的代码现在看起来像

//开始输出圣ock文件

$output = array(); while (!$products_stock->EOF) { 


$output["tx_type"]='ST'; 


$output["Stock_Code"]= $products_stock->fields['products_id']; 


$output["Qty"]= $products_stock->fields['products_quantity']; 


$output["Description"]= $products_stock->fields['products_name']; 


$output["CostPriceEx"]= $products_stock->fields['products_cost']; 


$output["TotalCostEx"]= $products_stock->fields['products_cost'] * $products_stock->fields['products_quantity']; 

$ products_stock-> MoveNext;

} 

zen_sages_fwrite($ output);

$ stimer = microtime_float();

+0

您使用的PDO?这只是做一个,因为你只取一行。根据资源类型'$ products_stock'的不同,您需要创建一个循环,它会遍历每一行,随时写入(或保存为一次写入)。另外,作为一个附注,您已经计算了查询中的总成本,为什么再次使用PHP进行计算而不是使用数据库中的字段? – Jon 2013-03-08 16:27:46

+0

嗨,jon,谢谢你的回复,我不知道PDO是什么?如何创建这个循环?我的经验是相当有限的。我应该有,并且会提前修改谢谢。 – 2013-03-08 16:35:52

+0

在你的'$ output = array()'的开头添加'while(!$ products_stock-> EOF){'并且关闭while在''''fwrite'后加上'}',但是在那之前,加上'$ products_stock-> MoveNext;' – Jon 2013-03-08 16:41:53

回答

0

在回答形式把这样你就可以得到它的工作更快^^ 你想要的东西,如:

while(!$products_sock->EOF) { 
    $output = array();  
    $output["tx_type"]='ST';   
    $output["Stock_Code"]= $products_stock->fields['products_id']; 
    $output["Qty"]= $products_stock->fields['products_quantity']; 
    $output["Description"]= $products_stock->fields['products_name']; 
    $output["CostPriceEx"]= $products_stock->fields['products_cost']; 
    $output["TotalCostEx"]= $products_stock->fields['products_cost'] * $products_stock->fields['products_quantity']; 

    zen_sages_fwrite($output); 
    $products_stock->MoveNext(); 
} 

随着您在上面添加,您覆盖$output与每一个循环的代码,这会写它的每一个循环然后覆盖它。

或者试试:

for($i=0;$i<$products_stock->rowCount();$i++) { 
    $output = array();  
    $output["tx_type"]='ST';   
    $output["Stock_Code"]= $products_stock->fields['products_id']; 
    $output["Qty"]= $products_stock->fields['products_quantity']; 
    $output["Description"]= $products_stock->fields['products_name']; 
    $output["CostPriceEx"]= $products_stock->fields['products_cost']; 
    $output["TotalCostEx"]= $products_stock->fields['products_cost'] * $products_stock->fields['products_quantity']; 

    zen_sages_fwrite($output); 
    $products_stock->MoveNext(); 
} 
+0

HI Jon,这就完成了它,但是在显示我们所有的产品后循环没有结束 – 2013-03-08 16:59:06

+0

当你说出来时它会发生什么不结束? – Jon 2013-03-08 17:00:07

+0

它列出了最后一个产品数千次.. – 2013-03-08 17:03:12