3

这是打印所有主题名称的程序,这是学生表的字段名称。我将所有主题名称存储到一个数组中,我必须在另一个页面中打印该数组值。所以我将该数组存储到会话变量中但是在下一页打印该数组时,它仅打印为“数组”。

<?php

session_start();
$con=mysql_connect("localhost","root","");  
mysql_select_db("cse",$con);

$sql="select * from studenttable where username='saravanan'";

$calname=array();
$i=0;
mysql_query($sql);
while($rs=mysql_fetch_field($result))
{
         $colname[$i]=$rs->name;
         $i++;


}
$_SESSION['subject']=$calname;
?>


in the next page i print the session variable using 


<?php
session_start();
echo $_SESSION['subject'];
?>

but i am getting "Array"only as output.
how to print the all value of array what i stored into it already?
4

2 回答 2

8

当然,您只是得到Array输出..您正在尝试将数组转换为字符串,而没有适用的函数。

如果您想将整个数组打印为字符串,请尝试print_r($array);.

此外,您当然可以使用字符串将数组连接在一起,使用implode().. 最后但并非最不重要的一点是,如果需要,请务必使用它们的键访问数组的各个部分:

echo $_SESSION['subject']['somekeyhere'];

但是,从您的代码中也可以看出,您实际上有一些拼写错误会阻止您获取所需的数据:$calname$colname您在 while 循环中拥有的变量相比.. 在会话中将其保留为空数组。

更新 1:

另一种打印整个数组的方法..或者更确切地说,回显每个单独的值:

foreach ($array as $key => $value) {
    echo $value . "<br />";
}

无关:

我不建议使用mysql_*函数来编写新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定哪个,这篇文章会帮助你。如果您选择 PDO,这里有很好的教程。另请参阅为什么我不应该在 PHP 中使用 mysql 函数?

使用 PDO 代替上述代码的示例(也修复了拼写错误):

try {
    $dbh = new PDO("mysql:host=localhost;dbname=cse", "root", "");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    echo "Error!  Could not connect to database: " . $e->getMessage() . "<br/>";
    die();
}

$stmt = $dbh->prepare("select * from studenttable where username=:username");
$stmt->bindValue(":username","saravanan");
$stmt->execute();

$calname = array();
$i = 0;
while ($rs = $stmt->fetch()) {
     $calname[$i]=$rs['name'];
     $i++;
}
$_SESSION['subject']=$calname;
于 2013-02-21T23:57:36.190 回答
4

尝试添加<pre>标签以获得更清晰的视图 $_SESSION。

    echo '<pre>';
    print_r($_SESSION);
    echo '</pre>';
于 2013-02-22T00:24:59.913 回答