我遇到了将结果对象保存在会话变量中的问题。我想知道是否有一种方法可以在会话变量中保存结果对象(而不是实际结果),这样我就可以在我的站点的其他区域使用它,而无需再次访问数据库。理论上,我试图做到以下几点:
$formQ2 = mysqli_query($dbconnection, $formQuery3);
$_SESSION['test'] = $formQ2;
然后我想使用会话变量:
while ($rows = mysqli_fetch_assoc($_SESSION['test'])){...}
当我运行它时,它会返回一个空对象而不是结果对象。同样,我不是试图将实际结果保存到会话而是结果对象,以便我可以在其他页面上循环它。谢谢。
只是为了让你知道我是否遵循了它,它运作正常。只是为了让你知道我的其余代码是正确的。while ($rows = mysqli_fetch_assoc($formQ2)){...}
它几乎就像会话没有设置一样,因为当我使用硬编码变量时它工作正常。感谢。
编辑 - 我的整个代码。因此,当我第一次运行它时(当会话为空并且第一次设置时)它运行正常。所以它持有会话供一次使用。当我刷新页面(同一页面没有更改)时,我得到错误,好像刷新页面是取消我的会话var。我的整个代码:
if (empty($_SESSION['test'])) {
$formQuery = "SELECT * FROM 'testTable'";
$_SESSION['test'] = mysqli_query($dbconnection, $formQuery);
echo "new sess";
} else {
$_SESSION['test'] = $_SESSION['test'];
echo "old sess";
}
while ($rows = mysqli_fetch_assoc($_SESSION['test'] )){...}
正如我所说的那样,它首次运行if语句它工作正常,但是当它触发else语句(页面刷新)时,它返回一个空的会话变量,即使它之前设置并且工作正常。我正在刷新的错误是:
Warning: mysqli_fetch_assoc(): Couldn't fetch mysqli_result in xxx on line
362
我很奇怪,在第一次加载时它会设置会话并且工作得很好。但是,当我只是按下刷新按钮时,它会抛出并出错。谢谢你的帮助。
答案 0 :(得分:1)
我想知道是否有办法在会话变量中保存结果对象(而不是实际结果)
不,没有。为了能够以文本形式存储值,PHP需要"序列化"它们,以及与serialize
函数几乎相同的会话环境,以及您找到的值参数的描述:
要序列化的值。 serialize()处理除
resource
类型之外的所有类型。
mysql_query的返回值恰好是mysql结果类型的资源。
但是你可以在会话中存储mysqli_fetch_assoc的结果,因为那只是一个数组,并且可以很好地序列化。但mysqli_fetch_assoc只从结果集中取出一行 - 因此,当您实际查询数据库时,或者首次使用mysqli_fetch_all
时,您仍需要使用循环将所有值放入会话中
答案 1 :(得分:0)
检查以下代码。我有一个适合你的例子。在做任何事情之前确保你已经开始了会话。
<?php
session_start();
$dbconnection = mysqli_connect("localhost","root","root","myDB");
$formQuery3 = "SELECT * FROM myTable";
$formQ2 = mysqli_query($dbconnection,$formQuery3);
$_SESSION['test'] = $formQ2;
while ($rows = mysqli_fetch_row($_SESSION['test'])){
print_r($rows);
}
?>
答案 2 :(得分:0)
以下是我使用的内容:
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase
WsdlTestCase.metaClass.myObject = new Expando(myList: [1,2,3,4,5])
log.info "list initialized: ${context.testCase.myObject.myList}"
WsdlTestCase.metaClass.myObject = new Expando(myList: [1,2,3,4,5,6,7])
log.info "list updated: ${context.testCase.myObject.myList}"