下面的代码在chrome上运行得很好,但是当我试图在firefox上加载它时,会说:‘注意:试图在*/loginTrueFunctions.php第23行中获取非对象的属性’
以下是“问题代码”:
$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不会出错,也不会给出结果。
发布于 2013-05-31 18:30:09
可能您的会话(或cookie)内容在浏览器之间是不同的(例如,您登录的是一个,而不是另一个)。做,做
var_dump($_SESSION); var_dump($_COOKIE); 并查看
发布于 2013-05-31 18:32:30
在尝试访问mysqli_fetch_object($queryFirstName);之前,请检查它的返回值。很可能您的查询没有返回任何内容。
另外要提到的是,从不将用户数据直接传递到查询,因为您容易受到sql注入攻击。仅仅因为你在使用mysqli,并不能使你免疫。您必须使用mysqli的特性,例如准备好的语句,以避免sql注入。
发布于 2013-05-31 18:37:16
更有可能的是,错误不会出现在两种浏览器上,而且只会出现损坏的标记,并且它们正在以两种不同的方式修复它,一种是让标记可见,另一种则不是。如果没有看到代码,就无法确定地知道。
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;https://stackoverflow.com/questions/16863568
复制相似问题