我在php中使用循环时遇到了一些麻烦。
循环是这样的:
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($ item)结果:
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 )
在运行get_item_name($ id)函数后尝试获取print_r($ item)会导致没有print_r输出。
答案 0 :(得分:0)
您错过了()
吗?
while($item = stmt->fetch(PDO::FETCH_ASSOC)){
答案 1 :(得分:0)
你忘记了var $ stmt上的$:
while($item = $stmt->fetch(PDO::FETCH_ASSOC)){
答案 2 :(得分: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();
}
答案 3 :(得分:0)
好的,这是你的错误:
$query_sql = "SELECT name from another_table where item_id = :item";
所以你想把参数设置为“:item”但是:
$query_stmt->bindParam(':id',$item['id'],PDO::PARAM_INT);
在这里,您绑定了参数“:id”,该参数未在查询中定义,因此您应将其更改为“:item”。