1

我的以下代码在 chrome 上运行良好,但是当我尝试在 firefox 上加载它时说:'注意:尝试在第 23 行获取* /loginTrueFunctions.php中的非对象属性'

这些是“问题代码”:

$firstName = $sqlObjectFirstName->firstName;

和:

$lastName = $sqlObjectLastName->lastName;

PHP代码:

function getFullName($id, $mysqli_connect){
    if(isset($_SESSION['login'])){

                    $queryFirstName = mysqli_query($mysqli_connect,"
                        SELECT firstName 
                        FROM users
                        WHERE id = '$id'
                        LIMIT 1
                    ");
                    $sqlObjectFirstName = mysqli_fetch_object($queryFirstName);
                    $firstName = $sqlObjectFirstName->firstName;
                    printf( ucfirst($firstName));
                    printf(' ');

                    $queryLastName = mysqli_query($mysqli_connect,"
                        SELECT lastName 
                        FROM users
                        WHERE id = '$id'
                        LIMIT 1
                    ");
                    $sqlObjectLastName = mysqli_fetch_object($queryLastName);
                    $lastName = $sqlObjectLastName->lastName;
                    printf( ucfirst($lastName));
    }
}

提前致谢!

编辑:如果我将结果称为数组,firefox 不会给出错误也不会给出结果,但是 chrome 会给出这个错误:不能使用 stdClass 类型的对象作为数组。

然后我将 mysqli_fetch_object 更改为 mysqli_fetch_array,结果:Chrome 工作正常,firefox 没有给出错误也没有结果。

4

4 回答 4

1

您的会话(或 cookie)内容可能在您的浏览器之间有所不同(例如,您使用一个登录,但没有使用另一个登录)。做一个

var_dump($_SESSION); var_dump($_COOKIE); 

看看

于 2013-05-31T18:30:09.043 回答
0

mysqli_fetch_object($queryFirstName);在尝试访问它之前检查它的返回值。您的查询可能没有返回任何内容。

另一件事要提到的是永远不要将用户数据直接传递到查询中,因为您很容易受到 sql 注入攻击。仅仅因为您使用的是mysqli,并不能使您免疫。您必须使用 mysqli 的功能(例如准备好的语句)来避免 sql 注入。

于 2013-05-31T18:32:30.987 回答
0

发布将这些数据从浏览器发布到 php 脚本的代码,很可能是您提交给服务器的数据因浏览器而异。

另外,显示您的数据如何在 php 方面被调用的代码在哪里?

于 2013-05-31T19:03:40.377 回答
0

更有可能两个浏览器都不会出现错误,只是标记损坏,他们正在以两种不同的方式修复它,一种使您的标记可见,另一种不可见。没有看到代码就无法确定。

专家提示

您可以在一次调用中从数据库中选择多个字段。

$res = mysqli_query($mysqli_connect,"
                    SELECT firstName, lastName 
                    FROM users
                    WHERE id = '".(int)$id."'
                    LIMIT 1");

if (!$res) die("Error running query at ".__FILE__." : ".__LINE__);

$person = mysqli_fetch_object($res);

echo $person->firstName; 
echo $person->lastName;
于 2013-05-31T18:37:16.030 回答