2017-02-16 102 views
0

我在循环中遇到了一些麻烦。Php/MSSQL - 循环停止

循环是这样的:

while($item = $stmt->fetch(PDO::FETCH_ASSOC)){ 
//Check for a special condition, the id of that item, like if($item['id'] == X) 
//for each id, theres a diferente if/else if in which I make another query to get the name 
    $query_sql = "SELECT name from another_table where item_id = :id"; 
    $query_stmt = $handler->prepare($query_sql); 
    $query_stmt->bindParam(':id',$item['id'],PDO::PARAM_INT); 
    $query_stmt->execute(); 
//fetch the result and put it into a variable 
} 

的问题是,循环似乎是第一个记录被唯一的工作,所以它可能是在中间的示数出来的地方。 我也注意到,如果我在循环之前运行一个查询来获取所有用户项目的计数,那么循环也会失败。

是否有限制多少查询,你可以在PHP中运行在mssql?

预先感谢您。

编辑:我还应该说,如果我不尝试在中间查询获取项目名称,那么循环将完全工作。

编辑2:

这是我使用来获取项目名称的功能:

`function get_item_name($id){ 
$item_name = "SELECT szName from TABLE_WITH_NAME where wItemID = :id"; 
$item_name_stmt = $dbg->prepare($item_name); 
$item_name_stmt->bindParam(':id', $id, PDO::PARAM_INT); 
$item_name_stmt->execute(); 
$item_info = $item_name_stmt->fetch(PDO::FETCH_ASSOC); 
$item_name_stmt = null; 
return $item_info['szName']; 

} `

而且一的print_r($项目)运行结果前功能:

Array ([dlID] => 3.377699720834E+15 [bStorageType] => 0 [dwStorageID] => 254 [bOwnerType] => 0 [dwOwnerID] => 9910 [bItemID] => 0 [wItemID] => 22105 [bLevel] => 24 [bCount] => 1 [bGLevel] => 0 [dwDuraMax] => 1000000 [dwDuraCur] => 999952 [bRefineCur] => 0 [dEndTime] => 2030-03-09 01:09:00 [bGradeEffect] => 5 [bMagic1] => 11 [bMagic2] => 13 [bMagic3] => 54 [bMagic4] => 0 [bMagic5] => 0 [bMagic6] => 0 [wValue1] => 100 [wValue2] => 43 [wValue3] => 130 [wValue4] => 0 [wValue5] => 0 [wValue6] => 0 [dwTime1] => 0 [dwTime2] => 0 [dwTime3] => 0 [dwTime4] => 0 [dwTime5] => 0 [dwTime6] => 0 [bGem] => 0 [wMoggItemID] => 153) 

试图在运行g之后获得print_r($ item) et_item_name($ id)函数不会导致print_r输出。

+0

这里的代码是否重现了问题?你说它“可能陷入某个地方”;你有没有尝试过放一些'echo'语句来看看它到底在哪里?这两件事都应该是创建[mcve]的一部分,这会帮助你理解问题,并帮助我们帮助你。 – IMSoP

+0

输入完整的代码会非常困难,因为它涉及数据库连接等。我可以发布一些我正在使用的代码。 –

+0

最重要的是我们不能真正回答有关“类似这样的事情”的代码的问题,“似乎”在做某件事情,而且“可能”有错误。这个可能性太高了,或者我们会发现一个无关的错误(如同几个人已经有的错误),或者我们没有找到错误的机会,因为它存在于你没有向我们显示的代码中。尝试打开一些错误日志记录,转储一些数据,调试代码,找到*哪里*出错,然后回来,我们将帮助您了解*为什么*它出错了。 – IMSoP

回答

0

你错过了()

while($item = stmt->fetch(PDO::FETCH_ASSOC)){ 
+0

nop,在写这篇文章时这是一个错误,我的错误,正如我所提到的,没有第二个查询从数据库中获取项目名称,该循环将一直工作到结束。 –

0

你忘了对变量$语句一个$:

while($item = $stmt->fetch(PDO::FETCH_ASSOC)){ 
+0

Ups是另一个错误,但这不是原因(就像我上面说的,只是在上面输入错误,和上面的错误一样,它很匆忙),问题似乎来自查询db为名。 –

0

将这项工作?我用稍微不同的方式使用PDO,我假设$ handler被定义为$ handler = new Database();或类似的东西?

while($item = stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
    $handler->query("SELECT name FROM another_table WHERE item_id = :item_id"); 
    $handler->bind(':item_id', $item['id']); 
    $result = $handler->single(); 
} 
+0

事情是这样的,我一直在使用它为整个项目,现在它似乎bugout,但它工作,如果我不查询数据库上的项目的名称。这很奇怪。 –

+0

你可以'print_r($ item);'并在这里发布结果? @AndréSoares –

+0

Array [[dlID] => 3.377699720834E + 15 [bStorageType] => 0 [dwStorageID] => 254 [bOwnerType] => 0 [dwOwnerID] => 9910 [bItemID] => 0 [wItemID] => 22105 [bLevel] => 24 [bCount] => 1 [bGLevel] => 0 [dwDuraMax] => 1000000 [dwDuraCur] => 999952 [bRefineCur] => 0 [dEndTime] => 2030-03-09 01:09: 0 [bMagic5] => 0 [bMagic6] => 0 [wValue1] => 100 [bMagic3] => wValue2] => 43 [wValue3] => 130 [wValue4] => 0 [wValue5] => 0 [wValue6] => 0 ...继续进行下去这是如果我在尝试获取名称VIA第二个查询 –

0

好了,所以这里是你的错误:
$query_sql = "SELECT name from another_table where item_id = :item";
所以,你要设置的参数为“:项”,而是:
$query_stmt->bindParam(':id',$item['id'],PDO::PARAM_INT);
在这里,你绑定的参数“:身份证”,这是不在查询中定义,因此您应该将其更改为“:item”。