如何在PHP中的$ _GET数组中存储对象。我想通过$ _GET数组将包含数据库信息的对象从一个页面传递到另一个页面,因此不需要再次访问数据库。
答案 0 :(得分:5)
要传递任何类型的对象,您必须在一端 serialize
,并在另一端 unserialize
但请注意,这对数据库连接本身不起作用:当PHP脚本结束时,将自动关闭与数据库的连接。
你可以传递一些连接信息,比如登录,主机或像这样的东西(但这不是一个好主意 - 暴露这些关键信息是不安全的!);但是你无法传递连接资源。
答案 1 :(得分:1)
您需要将其序列化为文本(可能使用json_encode),然后生成一个包含在查询字符串中的URL(确保它是urlencoded)
答案 2 :(得分:1)
实际上,如果可能的话,您应该通过$ _SESSION变量将数据从一个页面传递到另一个页面。这就是会议的目的。理想情况下,只需在会话中存储一个id,然后在每个页面上查找数据。如果你确实使用$ _SESSION那么它就像......一样简单。
$_SESSION['myarray'] = $myarrayobject;
$_SESSION['someotherthing'] = 42;
如果你必须使用$ _GET,那么我建议只传递某种类型的id,然后重新查找每页refesh上的数据。
请记住,恶意用户很容易更改通过页面之间的$ _GET发送的值,因此请确保此信息中没有任何内容可以滥用。
答案 3 :(得分:0)
这是个非常糟糕的主意 数据库是为每个请求提供服务而发明的,而查询字符串的设计只传递命令和标识符,而不是浏览器和服务器之间的大量数据
答案 4 :(得分:0)
除了使用get之外,将一些内容从一个页面传递到另一个页面的另一种可能性是使用$ _SESSION数组,然后在完成它时在另一侧取消设置该变量。我发现这是一个非常好的方法。
就像其他人所说的那样,传递数据库信息可能是一个坏主意,假设你传递的信息不是像用户名,名字等等。如果那就是当你说“数据库”时你正在传递的信息信息“然后我将所有内容存储在$ _SESSION变量中,然后在他们注销时销毁他们的会话。不要存储整个连接或其他东西。
答案 5 :(得分:0)
如前所述,您应该避免(错误地)将GET参数用作过于复杂和低数据的“缓存”。
另一方面,你的问题很模糊,可以假设你只想传输几个值。而你的“第二”脚本不需要数据库中的任何其他内容,事实上它可能甚至不必检查这些值是否来自数据库。
在这种情况下,从数据库结果中提取值,并将它们作为参数附加到url。尽量使参数列表尽可能简单但明确无误。 http_build_query()可以为您提供帮助。
但请记住,您希望保持GET操作的幂等性,如http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html中所述。
if ( isset($_GET['a'], $_GET['b'], $_GET['c']) ) {
// this doesn't care about the values in the database at all.
echo 'product: ', $_GET['a'] * $_GET['b'] * $_GET['c'], "\n";
}
else {
$pdo = new PDO("mysql:host=localhost;dbname=test", 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// let's make it a self-contained example (and extra constly) by creating a temproary table ...
$pdo->exec('CREATE TEMPORARY TABLE foo (id int auto_increment, a int, b int, c int, primary key(id))');
// ... with some garbage data
$stmt = $pdo->prepare('INSERT INTO foo (a,b,c) VALUES (?,?,?)');
for($i=0; $i<10; $i++) {
$stmt->execute(array(rand(1,10), rand(1,10), rand(1,10)));
}
foreach( $pdo->query('SELECT a,b,c FROM foo', PDO::FETCH_ASSOC) as $row) {
printf('<a href="?%s">%s</a><br />',
http_build_query($row),
join(' * ', $row)
);
}
}