我下面的代码在chrome上工作得很好,但是当我尝试在firefox上加载它时,它说:'注意:试图在*/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不给出错误或结果
可能您的会话(或cookie)内容在您的浏览器之间是不同的(例如,您使用一个浏览器登录,但不使用另一个)。做一个
var_dump($_SESSION); var_dump($_COOKIE);
和
访问mysqli_fetch_object($queryFirstName);
前请检查返回值。很可能你的查询没有返回任何东西。
另一件要提到的事情是不要将用户数据直接传递到查询中,因为您很容易受到sql注入攻击。仅仅因为你在使用mysqli,并不能使你免疫。您必须使用mysqli的特性,例如准备语句,以避免sql注入。
更可能的是,然后不是错误出现在两个浏览器上,只是有损坏的标记,他们正在修复它以两种不同的方式,一个离开你的标记可见,另一个不是。如果没有看到代码,就无法确定。
PROTIP
您可以在单个调用中从数据库中选择多个字段。
$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;
Post从浏览器发送数据到php脚本的代码,很可能由于浏览器的不同,您提交给服务器的数据是不同的。
还有,显示数据如何在PHP端被调用的代码在哪里?