我不是php的专家,我开发了一个查询mysql db的小服务。
然而我用php 5.4开发,然后发现我的网络托管计划有5.2.6,所以我对一些未定义的功能几乎没有问题。
具体来说,在这种情况下,如何解决>上可用的mysqli_stmt_get_result未定义函数? 5.3?这是代码:
$stmt = mysqli_prepare($con,$db_query);
if($stmt) {
mysqli_stmt_bind_param($stmt,'ss',$after,$lang);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt); // <-- getting undefined error here !!!
$updated = array();
$deleted = array();
while($row = mysqli_fetch_assoc($result)) {
if($row['status']==1) {
array_push($updated,$row);
} else {
$cardName=$row['cardName'];
$cardStatus=$row['status'];
$cardId=$row['cardId'];
$language=$row['language'];
array_push($deleted,array(
'cardName'=>$cardName,
'status'=>$cardStatus,
'cardId'=>$cardId,
'language'=>$language
)
);
}
}
$response = array(
'cards'=>array(
'updated'=>$updated,
'deleted'=>$deleted
)
);
$json = json_encode($response);
mysqli_close($con);
echo $json;
}
关键是我正在使用准备好的声明,由于我缺乏PHP知识,我发现在没有重写整个脚本的情况下我找不到解决问题的其他方法。
我认为你们中的一些人可能有一个简单易行的解决方案。
答案 0 :(得分:6)
有类似的问题。 BTW - mysqlnd可用于5.3,但它必须编译成.5.4,它默认存在。
就我而言,我能够保留大部分代码并通过替换以下内容使其工作
$result = mysqli_stmt_get_result($stmt); // <-- doesn't work without mysqlnd
while($row = mysqli_fetch_assoc($result)) {
$cardName=$row['cardName'];
...
}
与
$stmt->bind_result($dbCardId, $dbCardName); // <-- one param for each field returned
while ($stmt->fetch()) {
$cardName = $dbCardName;
...
}
答案 1 :(得分:0)
mysqli_stmt_get_result
函数仅为PHP 5.3或更高版本。它不适用于您的PHP 5.2.x版本(不再支持btw。)。
另一种方法是使用带有变量绑定的mysqli_stmt_bind_result
。
在您的具体示例中,这甚至带来了您不需要将数组成员分配给变量的好处,因为您可以直接绑定变量。
我引入了mysqli_stmt_get_result
函数,因为someone thought这会妨碍您使用数组会更容易。
答案 2 :(得分:0)
如果您处于不允许添加mysqlnd的情况,则会显示如何在没有mysqli_stmt_get_result()的情况下将数据导入关联数组。 Mysqli - Bind results to an Array